字典是Python中一种可变容器模型,用于存储键值对(key-value)数据。它通过键来快速访问值,具有高效的查找性能。以下是字典的核心特性和操作方法:
字典的创建
字典用花括号 {}
或 dict()
函数创建,键值对用冒号 :
分隔:
dict1 = {'name': 'Alice', 'age': 25} # 直接创建
dict2 = dict(name='Bob', age=30) # 使用dict()构造函数
字典的基本操作
- 访问值:通过键直接访问,若键不存在会抛出
KeyError
:print(dict1['name']) # 输出: Alice
- 安全访问:get方法通过key取值,如果key不存在,返回默认值,也可以自己设置默认值
print(dict1.get('gender', 'Unknown')) # 输出: Unknown
- 修改值:直接对键赋值:
dict1['age'] = 26 # 更新age的值
- 添加键值对:对新键赋值:
dict1['gender'] = 'Female' # 新增键值对
字典的常用方法
- 删除元素:
del dict1['age'] # 删除指定键 value = dict1.pop('name') # 删除并返回键对应的值
- 遍历字典:
for key in dict1: # 遍历键 print(key, dict1[key]) for key, value in dict1.items(): # 同时遍历键和值 print(key, value)
- 获取所有键或值:
keys = dict1.keys() # 获取所有键的视图 values = dict1.values()# 获取所有值的视图
字典推导式
类似列表推导式,可快速生成字典:
squares = {x: x**2 for x in range(5)} # {0: 0, 1: 1, 2: 4, ...}
注意事项
- 键的唯一性:键必须是不可变类型(如字符串、数字、元组),且不允许重复。
- 无序性:Python 3.7+ 中字典保持插入顺序,但不应依赖此特性进行排序操作。
判断成员关系:列表,元组和字典
在 Python 中,判断一个元素是否存在于某个数据结构(如列表、元组或字典)中,可以使用 in
关键字或特定的方法。以下是针对不同数据结构的成员关系判断方法:
列表和元组
列表和元组是序列类型,支持直接使用 in
关键字判断元素是否存在。它们的判断方式相同。
my_list = [1, 2, 3, 4, 5]
my_tuple = (10, 20, 30, 40, 50)
# 判断元素是否在列表中
print(3 in my_list) # 输出: True
print(6 in my_list) # 输出: False
# 判断元素是否在元组中
print(30 in my_tuple) # 输出: True
print(60 in my_tuple) # 输出: False
字典
字典是键值对结构,in
关键字默认检查的是键而非值。如果需要检查值或键值对,需使用特定方法。
my_dict = {'a': 1, 'b': 2, 'c': 3}
# 判断键是否在字典中
print('a' in my_dict) # 输出: True
print('d' in my_dict) # 输出: False
# 判断值是否在字典中
print(2 in my_dict.values()) # 输出: True
print(4 in my_dict.values()) # 输出: False
# 判断键值对是否在字典中
print(('a', 1) in my_dict.items()) # 输出: True
print(('a', 2) in my_dict.items()) # 输出: False
性能差异
- 列表和元组:成员关系检查的时间复杂度为 O(n),因为需要遍历整个序列。
- 字典:键的检查平均时间复杂度为 O(1),因为字典基于哈希表实现。值的检查仍需 O(n),因为要遍历所有值。
注意事项
- 字典的
in
操作符仅检查键,不检查值。 - 如果需要频繁检查成员关系,字典(键查询)比列表或元组更高效。