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. 关键记住:元组的核心是 "不可变",字典的核心是 "键值对 + 快速查找"。
相关推荐
tjjucheng1 天前
靠谱的小程序定制开发哪个好
python
num_killer1 天前
小白的Langchain学习
java·python·学习·langchain
WangYaolove13141 天前
基于深度学习的中文情感分析系统(源码+文档)
python·深度学习·django·毕业设计·源码
自学不成才1 天前
深度复盘:一次flutter应用基于内存取证的黑盒加密破解实录并完善算法推理助手
c++·python·算法·数据挖掘
徐先生 @_@|||1 天前
Palantir Foundry 五层架构模型详解
开发语言·python·深度学习·算法·机器学习·架构
深蓝电商API1 天前
Scrapy爬虫限速与并发控制最佳实践
爬虫·python·scrapy
Derrick__11 天前
淘宝MD5爬虫
爬虫·python
薛定谔的猫19821 天前
llama-index Embedding 落地到 RAG 系统
开发语言·人工智能·python·llama-index
nimadan121 天前
**手机小说扫榜工具2025推荐,精准追踪榜单动态与题材风向
python·智能手机
编程武士1 天前
Python 各版本主要变化速览
开发语言·python