在Python中,字典(dict
)是一种可变容器模型,它可以存储任意类型对象,其中每个对象都存储为一个键值对。键和值是映射关系,键是唯一的,而值则不必唯一。以下是关于Python字典的一些基本用法和特性:
创建字典
你可以通过几种方式创建字典:
- 使用花括号
{}
创建一个空的字典或者直接初始化键值对:
empty_dict = {}
dict1 = {'key1': 'value1', 'key2': 'value2'}
- 使用
dict()
构造函数:
dict2 = dict(key1='value1', key2='value2')
- 从键值对列表创建字典:
dict3 = dict([('key1', 'value1'), ('key2', 'value2')])
访问字典中的值
可以通过键来访问字典中的值:
value = dict1['key1']
如果尝试访问一个不存在的键,会引发一个 KeyError
。为了避免这种情况,可以使用 get()
方法,它会在键不存在时返回一个默认值(默认为 None
):
value = dict1.get('key1', 'default_value')
修改字典
- 添加新的键值对:
dict1['key3'] = 'value3'
- 修改现有键的值:
dict1['key1'] = 'new_value'
- 删除键值对:
del dict1['key1']
或者使用 pop()
方法,它也会返回被删除的值:
value = dict1.pop('key1')
字典的方法
字典提供了许多有用的方法,例如:
-
keys()
:返回字典中所有键的列表。 -
values()
:返回字典中所有值的列表。 -
items()
:返回字典中所有键值对的列表。 -
clear()
:删除字典中所有的元素。 -
copy()
:返回一个字典的浅复制。 -
update()
:使用另一个字典中的键值对更新字典。
# 假设有两个字典
dict1 = {'a': 1, 'b': 2, 'c': 3}
dict2 = {'b': 4, 'c': 5, 'd': 6}
# 使用 dict2 更新 dict1
dict1.update(dict2)
# dict1 现在是 {'a': 1, 'b': 4, 'c': 5, 'd': 6}
# 注意 'b' 和 'c' 的值被 dict2 中的值覆盖了
update() 方法也可以接受关键字参数,这些参数会被当作单个键值对来处理:
# 继续使用上面的 dict1
dict1.update(d=7, e=8)
# dict1 现在是 {'a': 1, 'b': 4, 'c': 5, 'd': 7, 'e': 8}
# 注意 'd' 的值被新的值覆盖了
如果 update() 方法中的键在原字典中不存在,那么这些键值对会被添加到原字典中
# 假设原字典是空的
dict1 = {}
dict2 = {'a': 1, 'b': 2}
# 使用 dict2 更新 dict1
dict1.update(dict2)
# dict1 现在是 {'a': 1, 'b': 2}
字典推导式
Python支持通过字典推导式来快速生成字典:
{x: x**2 for x in range(10)}
这将创建一个字典,其键为0到9的数字,对应的值为它们的平方。
字典的遍历
你可以使用 for
循环遍历字典的键、值或者键值对:
for key in dict1:
print(key) # 打印键
for value in dict1.values():
print(value) # 打印值
for key, value in dict1.items():
print(key, value) # 打印键值对
len() 函数可以返回字典中键值对的数量。
# 定义一个字典
my_dict = {'a': 1, 'b': 2, 'c': 3}
# 使用 len() 函数获取字典中键值对的数量
number_of_items = len(my_dict)
print(number_of_items) # 输出: 3
deepcopy()函数来自于 copy 模块,用于创建一个对象的深拷贝,即复制对象及其包含的所有对象。在处理字典时,如果字典的值包含可变对象(如列表、字典等),使用 deepcopy() 可以确保原始字典和复制后的字典完全独立。
import copy
original_dict = {'a': [1, 2, 3], 'b': {'inner_key': 'inner_value'}}
copied_dict = copy.deepcopy(original_dict)
# 修改复制后的字典不会影响原始字典
copied_dict['a'].append(4)
copied_dict['b']['inner_key'] = 'new_inner_value'
print(original_dict) # 输出: {'a': [1, 2, 3], 'b': {'inner_key': 'inner_value'}}
print(copied_dict) # 输出: {'a': [1, 2, 3, 4], 'b': {'inner_key': 'new_inner_value'}}
fromkeys() 是字典类的一个静态方法,用于创建一个新字典,其中的键来自指定的可迭代对象,所有的键都映射到同一个值(默认为 None)。
keys = ['a', 'b', 'c']
default_value = 0
new_dict = dict.fromkeys(keys, default_value)
print(new_dict) # 输出: {'a': 0, 'b': 0, 'c': 0}
如果不指定默认值,则默认为 None:
new_dict = dict.fromkeys(keys)
print(new_dict) # 输出: {'a': None, 'b': None, 'c': None}
get() 方法用于获取字典中指定键的值。如果键不存在,get() 方法不会抛出异常,而是返回一个默认值(默认为 None)。你可以通过第二个参数指定一个默认返回值。
my_dict = {'a': 1, 'b': 2}
# 获取存在的键的值
value_a = my_dict.get('a') # 输出: 1
# 获取不存在的键的值,返回 None
value_c = my_dict.get('c') # 输出: None
# 获取不存在的键的值,指定默认返回值
value_c = my_dict.get('c', 'Not Found') # 输出: 'Not Found'
popitem() 方法用于从字典中移除并返回一个键值对(项)。在Python 3.7+ 中,popitem() 保证移除的是字典中的最后一个键值对。
my_dict = {'a': 1, 'b': 2, 'c': 3}
# 使用 popitem() 移除并返回字典中的最后一个键值对
last_item = my_dict.popitem()
print(last_item) # 输出: ('c', 3)
print(my_dict) # 输出: {'a': 1, 'b': 2}
setdefault() 方法用于设置字典中某个键的值,如果该键不存在,则添加该键,并设置一个默认值。如果键已经存在,setdefault() 不会改变现有的值。
my_dict = {'a': 1, 'b': 2}
# 尝试设置键 'a' 的值,但由于 'a' 已存在,其值不会改变
my_dict.setdefault('a', 100)
# 尝试设置键 'c' 的值,由于 'c' 不存在,它会被添加到字典中
my_dict.setdefault('c', 3)
print(my_dict) # 输出: {'a': 1, 'b': 2, 'c': 3}
字典是Python中非常强大和灵活的数据结构,广泛用于存储和查找相关数据。
网友评论