python元组和字典

一、元组(tuple)

元组是 Python 中有序、不可修改的序列,常用于存储不会变化的数据(比如固定的配置信息、坐标等)。

1. 元组的创建

元组用 () 包裹元素,元素之间用逗号分隔,语法非常简单:

python

运行

ini 复制代码
# 1. 直接用 () 创建(推荐)
tuple1 = (1, 2, 3, "Python", True)  # 元素可以是不同类型(数字、字符串、布尔值等)
tuple2 = ("苹果", "香蕉", "橙子")     # 同类型元素的元组

# 2. 省略 () 创建(简写形式)
tuple3 = 10, 20, 30  # 等价于 (10, 20, 30),注意必须有逗号

# 3. 单个元素的元组(必须加逗号,否则会被当成普通变量)
tuple4 = (5,)  # 正确:元组类型
tuple5 = (5)   # 错误:int类型(不是元组)

# 4. 空元组
empty_tuple = ()

2. 元组的核心特性

  • 有序:元素的存储顺序和创建时一致,支持通过索引访问(索引从 0 开始)。
  • 不可修改:创建后不能添加、删除或修改元素(这是元组和列表最核心的区别)。

python

运行

ini 复制代码
tuple1 = (1, 2, 3)
print(tuple1[0])  # 输出:1(通过索引访问第一个元素)
print(tuple1[-1]) # 输出:3(通过负索引访问最后一个元素)

# 以下操作会报错(元组不可修改)
tuple1[0] = 100  # 错误:不能修改元素
tuple1.append(4) # 错误:没有append方法(无法添加元素)
del tuple1[1]    # 错误:不能删除元素

3. 元组的常用操作

虽然元组不可修改,但有一些实用的内置操作:

python

运行

python 复制代码
tuple2 = ("苹果", "香蕉", "橙子")

# 1. 计算长度(元素个数)
print(len(tuple2))  # 输出:3

# 2. 查找元素是否存在(in/not in)
print("香蕉" in tuple2)  # 输出:True
print("葡萄" not in tuple2)  # 输出:True

# 3. 统计元素出现次数
tuple3 = (1, 2, 2, 3, 2)
print(tuple3.count(2))  # 输出:3

# 4. 查找元素的索引(找到第一个匹配项)
print(tuple3.index(3))  # 输出:3(3在索引3的位置)

# 5. 元组拼接(生成新元组,原元组不变)
tuple4 = (4, 5)
new_tuple = tuple3 + tuple4
print(new_tuple)  # 输出:(1, 2, 2, 3, 2, 4, 5)

二、字典(dictionary)

字典是 Python 中无序(Python 3.7 + 后实际有序)、键值对(key-value) 类型的数据结构,核心作用是通过 "键" 快速查找 "值"(比如存储用户信息:姓名→小明,年龄→20)。

1. 字典的创建

字典用 {} 包裹,每个元素是 key: value 的形式,键值对之间用逗号分隔:

python

运行

makefile 复制代码
# 1. 直接用 {} 创建(推荐)
user = {
    "name": "小明",    # key: "name",value: "小明"
    "age": 20,        # key: "age",value: 20
    "gender": "男",
    "hobbies": ["篮球", "游戏"]  # value可以是列表、元组等复杂类型
}

# 2. 用 dict() 函数创建
student = dict(name="小红", age=18, score=95)  # 键不需要加引号
empty_dict = dict()  # 空字典

# 3. 空字典的简写
empty_dict2 = {}

2. 字典的核心规则

  • key(键)的要求 :必须是不可变类型 (字符串、数字、元组),且不能重复(重复的键会覆盖前面的值)。
  • value(值)的要求:可以是任意类型(数字、字符串、列表、字典等),可以重复。

python

运行

ini 复制代码
# 错误的key示例(以下会报错)
dict1 = {[1,2]: "错误"}  # 列表是可变类型,不能作为key
dict2 = {"name": "张三", "name": "李四"}  # 重复key,最终存储"name": "李四"(覆盖)

# 正确的key示例
dict3 = {(1,2): "坐标", "score": 90, 100: "满分"}  # 元组、字符串、数字都可以作为key

3. 字典的常用操作(重点)

字典的核心操作围绕 "增删改查" 展开,都是通过 key 实现的:

python

运行

scss 复制代码
user = {"name": "小明", "age": 20, "gender": "男"}

# 1. 查:通过key获取value(最常用)
print(user["name"])  # 输出:小明(直接用[key]访问)
print(user.get("age"))  # 输出:20(用get()方法访问,推荐)

# 注意:key不存在时的区别
# print(user["height"])  # 报错:KeyError(key不存在)
print(user.get("height", 175))  # 输出:175(key不存在时返回默认值,不会报错)

# 2. 增:添加新的键值对
user["height"] = 175  # 新增key: "height",value: 175
user["hobbies"] = ["篮球", "游戏"]
print(user)  # 输出:{'name': '小明', 'age': 20, 'gender': '男', 'height': 175, 'hobbies': ['篮球', '游戏']}

# 3. 改:修改已有key的value
user["age"] = 21  # key已存在,直接覆盖value
print(user["age"])  # 输出:21

# 4. 删:删除键值对
del user["gender"]  # 通过key删除
print(user)  # 输出:{'name': '小明', 'age': 21, 'height': 175, 'hobbies': ['篮球', '游戏']}

user.pop("height")  # 用pop()删除,返回对应的value
print(user)  # 输出:{'name': '小明', 'age': 21, 'hobbies': ['篮球', '游戏']}

# 5. 其他常用操作
print(len(user))  # 输出:3(统计键值对个数)
print(user.keys())  # 输出:dict_keys(['name', 'age', 'hobbies'])(获取所有key)
print(user.values())  # 输出:dict_values(['小明', 21, ['篮球', '游戏']])(获取所有value)
print(user.items())  # 输出:dict_items([('name', '小明'), ('age', 21), ('hobbies', ['篮球', '游戏'])])(获取所有键值对)

# 6. 遍历字典(常用)
for key in user:
    print(f"{key}: {user[key]}")  # 遍历key,通过key获取value

三、元组和字典的核心区别

特性 元组(tuple) 字典(dictionary)
存储形式 有序序列(单个元素) 无序键值对(key-value)
是否可修改 不可修改(只读) 可修改(增删改键值对)
访问方式 通过索引(如 tuple [0]) 通过 key(如 dict ["name"])
元素要求 元素可以是任意类型 key 必须是不可变类型,value 任意
核心用途 存储固定不变的数据 存储需要快速查找、映射的数据

总结

  1. 元组 :用 () 创建,有序不可修改,通过索引访问,适合存储固定数据(如坐标、配置项)。
  2. 字典 :用 {} 创建,键值对结构,通过 key 快速访问 value,支持增删改,适合存储需要映射关系的数据(如用户信息、配置表)。
  3. 关键记住:元组的核心是 "不可变",字典的核心是 "键值对 + 快速查找"。
相关推荐
沐雪轻挽萤1 小时前
pytorch模型部署基础知识
人工智能·pytorch·python
xxxxxmy1 小时前
相向双指针—接雨水
python·相向双指针
nix.gnehc1 小时前
PyTorch数据加载与预处理
人工智能·pytorch·python
Sindy_he2 小时前
2025最新版微软GraphRAG 2.0.0本地部署教程:基于Ollama快速构建知识图谱
python·microsoft·大模型·知识图谱·rag
鲸落✗2 小时前
深入解析单HTML实现的网页版《我的世界》(附代码下载链接)
前端·python·html
Aerelin2 小时前
豆瓣数据采集案例
前端·爬虫·python·js·playwright
lqwh53542 小时前
python控制修改comsol边界条件仿真方法
开发语言·python
WenGyyyL2 小时前
基于昇腾平台的Qwen大模型推理部署实战:从模型转换到推理(含代码)
人工智能·python·语言模型·nlp·昇腾
q***54752 小时前
解决no main manifest attribute错误
ide·python·pycharm