字典
字典 (Dictionary) 是 Python 中一种常用的数据结构,它以键值对 (key-value pair) 的形式存储数据。每个键必须是唯一的,并且与一个值关联。字典是无序的,这意味着键值对的顺序是不确定的。
字典的创建
使用花括号 {}
创建
python
my_dict = {"name": "Alice", "age": 30, "city": "Beijing"}
print(my_dict) # 输出: {'name': 'Alice', 'age': 30, 'city': 'Beijing'}
使用 dict()
函数创建
python
my_dict = dict(name="Bob", age=25, city="Shanghai")
print(my_dict) # 输出: {'name': 'Bob', 'age': 25, 'city': 'Shanghai'}
字典的访问
使用键
使用方括号 []
和键来访问与键关联的值。
python
print(my_dict["name"]) # 输出: Alice
使用 get()
方法
更安全的方式,如果键不存在,返回 None
。
python
print(my_dict.get("job")) # 输出: None
print(my_dict.get("job", "Unknown")) # 输出: Unknown (指定默认值)
字典的修改
使用键和赋值运算符: 直接修改与键关联的值。
python
my_dict["age"] = 31
print(my_dict) # 输出: {'name': 'Alice', 'age': 31, 'city': 'Beijing'}
字典的添加
使用键和赋值运算符: 添加新的键值对。
python
my_dict["job"] = "Software Engineer"
print(my_dict) # 输出: {'name': 'Alice', 'age': 31, 'city': 'Beijing', 'job': 'Software Engineer'}
字典的删除
使用 del
关键字
python
del my_dict["city"]
print(my_dict) # 输出: {'name': 'Alice', 'age': 31, 'job': 'Software Engineer'}
使用 pop()
方法
python
city = my_dict.pop("job")
print(city) # 输出: Software Engineer
print(my_dict) # 输出: {'name': 'Alice', 'age': 31}
字典的合并
字典合并指的是将两个或多个字典的内容合并成一个新的字典。Python 提供了多种方法实现字典合并,每种方法都有其优缺点:
使用 update()
方法
update()
方法将另一个字典的内容更新到当前字典中。如果两个字典中存在相同的键,则使用另一个字典中的值覆盖当前字典中的值。
python
dict1 = {'a': 1, 'b': 2}
dict2 = {'c': 3, 'd': 4}
dict1.update(dict2)
print(dict1) # 输出: {'a': 1, 'b': 2, 'c': 3, 'd': 4}
使用解包运算符 **
解包运算符 **
可以将字典展开,将其中的键值对合并到新的字典中。
dict1 = {'a': 1, 'b': 2}
dict2 = {'c': 3, 'd': 4}
merged_dict = {**dict1, **dict2}
print(merged_dict) # 输出: {'a': 1, 'b': 2, 'c': 3, 'd': 4}
使用 collections.ChainMap
collections.ChainMap
类可以将多个字典链接在一起,形成一个新的视图。当访问键时,它会依次查找每个字典,直到找到匹配的键。
from collections import ChainMap
dict1 = {'a': 1, 'b': 2}
dict2 = {'c': 3, 'd': 4}
merged_dict = ChainMap(dict1, dict2)
print(merged_dict['a']) # 输出: 1
print(merged_dict['c']) # 输出: 3
print(merged_dict) # 输出: ChainMap({'a': 1, 'b': 2}, {'c': 3, 'd': 4})
注意事项
update()
方法会修改原字典,而解包运算符和ChainMap
则不会修改原字典。- 如果两个字典中有相同的键,使用
update()
和解包运算符会使用后一个字典的值覆盖前一个字典的值。 ChainMap
不会真正合并字典,而是创建了一个新的视图,当访问键时会依次查找每个字典。
字典的排序
字典本身是无序的,但我们可以使用一些方法将字典按照键或值进行排序。
按照键排序
python
my_dict = {'c': 3, 'a': 1, 'b': 2}
sorted_keys = sorted(my_dict)
print(sorted_keys) # 输出: ['a', 'b', 'c']
按照值排序
可以使用 sorted()
函数结合 items()
方法,对字典的键值对按照值进行排序。
python
my_dict = {'c': 3, 'a': 1, 'b': 2}
sorted_items = sorted(my_dict.items(), key=lambda item: item[1])
print(sorted_items) # 输出: [('a', 1), ('b', 2), ('c', 3)]
使用 collections.OrderedDict
collections.OrderedDict
类可以保留字典元素插入的顺序。
python
from collections import OrderedDict
my_dict = OrderedDict([('c', 3), ('a', 1), ('b', 2)])
print(my_dict) # 输出: OrderedDict([('c', 3), ('a', 1), ('b', 2)])
注意事项
sorted()
函数创建的是一个新的排序后的列表,不会修改原字典。OrderedDict
保留插入顺序,但无法根据键或值进行排序。
字典其他常见操作
keys()
: 获取字典中的所有键
keys = my_dict.keys()
print(keys) # 输出: dict_keys(['name', 'age'])
values()
: 获取字典中的所有值
python
values = my_dict.values()
print(values) # 输出: dict_values(['Alice', 31])
items()
: 获取字典中所有键值对
python
items = my_dict.items()
print(items) # 输出: dict_items([('name', 'Alice'), ('age', 31)])
len()
函数: 获取字典中键值对的数量
python
length = len(my_dict)
print(length) # 输出: 2
in
运算符: 检查字典中是否存在某个键
python
if "name" in my_dict:
print("The key 'name' exists")
总结
字典是 Python 中非常强大的数据结构,它提供了一种灵活、高效的方式来存储和访问数据。通过掌握字典的基本操作,我们可以更方便地处理各种数据,并提高代码的效率。