Python 字典的用法和技巧
字典的创建与初始化
Python 字典是一种可变容器模型,可存储任意类型对象。字典的每个键值对用冒号分隔,键值对之间用逗号分隔,整个字典包括在花括号中。
# 创建一个空字典
empty_dict = {}# 创建一个包含键值对的字典
my_dict = {'name': 'Alice', 'age': 25, 'city': 'New York'}
字典的访问与修改
通过键可以访问字典中的值,如果键不存在,会抛出 KeyError
异常。可以使用 get
方法来避免异常,并返回默认值。
# 访问字典中的值
print(my_dict['name']) # 输出: Alice# 修改字典中的值
my_dict['age'] = 26
print(my_dict) # 输出: {'name': 'Alice', 'age': 26, 'city': 'New York'}# 使用 get 方法访问不存在的键
print(my_dict.get('gender', 'Unknown')) # 输出: Unknown
字典的遍历
可以使用 for
循环遍历字典的键、值或键值对。
# 遍历字典的键
for key in my_dict:print(key)# 遍历字典的值
for value in my_dict.values():print(value)# 遍历字典的键值对
for key, value in my_dict.items():print(f"{key}: {value}")
字典的合并
可以使用 update
方法将一个字典的键值对合并到另一个字典中。如果键已存在,则更新其值。
# 合并两个字典
dict1 = {'a': 1, 'b': 2}
dict2 = {'b': 3, 'c': 4}
dict1.update(dict2)
print(dict1) # 输出: {'a': 1, 'b': 3, 'c': 4}
字典的推导式
字典推导式是一种简洁的创建字典的方法,类似于列表推导式。
# 使用字典推导式创建字典
squares = {x: x**2 for x in range(6)}
print(squares) # 输出: {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
字典的排序
字典本身是无序的,但可以通过 sorted
函数对字典的键或值进行排序。
# 对字典的键进行排序
sorted_keys = sorted(my_dict.keys())
print(sorted_keys) # 输出: ['age', 'city', 'name']# 对字典的值进行排序
sorted_values = sorted(my_dict.values())
print(sorted_values) # 输出: [26, 'Alice', 'New York']
字典的嵌套
字典可以嵌套其他字典,形成复杂的数据结构。
# 创建一个嵌套字典
nested_dict = {'person1': {'name': 'Alice', 'age': 25},'person2': {'name': 'Bob', 'age': 30}
}# 访问嵌套字典中的值
print(nested_dict['person1']['name']) # 输出: Alice
字典的删除
可以使用 del
语句删除字典中的键值对,或使用 pop
方法删除并返回指定键的值。
# 删除字典中的键值对
del my_dict['city']
print(my_dict) # 输出: {'name': 'Alice', 'age': 26}# 使用 pop 方法删除并返回值
age = my_dict.pop('age')
print(age) # 输出: 26
print(my_dict) # 输出: {'name': 'Alice'}
字典的默认值
可以使用 collections.defaultdict
来创建一个默认值字典,当访问不存在的键时,返回默认值。
from collections import defaultdict# 创建一个默认值为 0 的字典
default_dict = defaultdict(int)
default_dict['a'] += 1
print(default_dict) # 输出: defaultdict(<class 'int'>, {'a': 1})
字典的浅拷贝与深拷贝
使用 copy
方法可以进行字典的浅拷贝,使用 copy.deepcopy
可以进行深拷贝。
import copy# Original dictionary with nested structure
original_dict = {'name': 'Alice','age': 30,'address': {'street': '123 Main St','city': 'Wonderland'}
}# Create a shallow copy of the original dictionary
shallow_copied_dict = original_dict.copy()# Create a deep copy of the original dictionary
deep_copied_dict = copy.deepcopy(original_dict)# Modify the nested dictionary in the original
original_dict['address']['city'] = 'New Wonderland'# Print out all dictionaries
print("Original Dictionary:")
print(original_dict)print("\nShallow Copied Dictionary:")
print(shallow_copied_dict)print("\nDeep Copied Dictionary:")
print(deep_copied_dict)
字典的键值查找
可以使用 in
关键字检查字典中是否存在某个键或值。
my_dict = {'name': 'Alice','age': 30,'city': 'Wonderland'
}# 检查字典中是否存在某个键
print('name' in my_dict) # 输出: True# 检查字典中是否存在某个值
print('Alice' in my_dict.values()) # 输出: True
字典的键值去重
可以使用 set
对字典的键值进行去重。
my_dict = {'person1': 'Alice','person2': 'Bob','person3': 'Alice', # 重复的值'person4': 'Charlie','person5': 'Bob' # 重复的值
}unique_values = set(my_dict.values())
print(unique_values)