本节解释了如何在 Python 中向字典 (dict 类型的对象) 添加新元素或更新现有元素的值。也可以连接(加入、合并)多个字典。
- 通过指定键来添加和更新元素到字典中。
- 多个字典的连接(合并):update(),| operator,|= operator。
- 添加或更新多个元素:update(),|= 操作员。
通过指定键来添加和更新元素到字典中。
你可以通过以下方式添加/update字典元素。
字典对象[key]=值
当指定一个不存在的键时,会增加一个新元素,当指定一个现有的键时,会更新(覆盖)现有的值。
d = {'k1': 1, 'k2': 2}
d['k3'] = 3
print(d)
# {'k1': 1, 'k2': 2, 'k3': 3}
d['k1'] = 100
print(d)
# {'k1': 100, 'k2': 2, 'k3': 3}
如果不想更新存在的键的值,可以使用setdefault()方法。
连接(合并)多个字典: update(), | operator, |= operator。
更新()
如果指定另一个 dictionary 对象作为 dictionary 对象的方法 update() 的参数,那么它的所有元素将被添加。
如果键与现有的键重合,它将被参数中指定的字典值覆盖。
d1 = {'k1': 1, 'k2': 2}
d2 = {'k1': 100, 'k3': 3, 'k4': 4}
d1.update(d2)
print(d1)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}
在 update() 参数中指定多个字典是错误的。
d1 = {'k1': 1, 'k2': 2}
d2 = {'k3': 3, 'k4': 4}
d3 = {'k5': 5, 'k6': 6}
# d1.update(d2, d3)
# TypeError: update expected at most 1 arguments, got 2
后面解释过,update()可以将新的元素作为关键字参数(key=value)添加,所以只要将**添加到字典中,并将每个元素作为关键字参数展开,然后传递给它。
d1.update(**d2, **d3)
print(d1)
# {'k1': 1, 'k2': 2, 'k3': 3, 'k4': 4, 'k5': 5, 'k6': 6}
和前面的例子一样,使用update()将更新原来的字典对象。
如果你想通过合并多个字典来生成一个新的字典,请使用{**d1, **d2}。(从 Python 3.5 开始) 或 dict(**d1, **d2)。
在 Python 3.9 和更高版本中,也可以使用下面描述的| 操作符来创建新的字典。
| 运算符,|= 运算符 (Python 3.9 及以后版本)
从 Python 3.9 开始,可以使用 | 操作符来合并两个字典。当两个字典的键相同时,右边的值具有优先权。
d1 = {'k1': 1, 'k2': 2}
d2 = {'k1': 100, 'k3': 3, 'k4': 4}
print(d1 | d2)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}
print(d2 | d1)
# {'k1': 1, 'k3': 3, 'k4': 4, 'k2': 2}
|也可以通过一系列的运算符来组合多个词典。
d1 = {'k1': 1, 'k2': 2}
d2 = {'k3': 3, 'k4': 4}
d3 = {'k5': 5, 'k6': 6}
print(d1 | d2 | d3)
# {'k1': 1, 'k2': 2, 'k3': 3, 'k4': 4, 'k5': 5, 'k6': 6}
+和update()一样,左边的对象被更新。
d1 = {'k1': 1, 'k2': 2}
d2 = {'k1': 100, 'k3': 3, 'k4': 4}
d1 |= d2
print(d1)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}
添加或更新多个元素:update(), |= 操作员。
更新()
当在update()方法中指定关键字参数key=value时,将添加key键和value值。如果键值与现有的键值重合,则会被参数中指定的值覆盖。
d = {'k1': 1, 'k2': 2}
d.update(k1=100, k3=3, k4=4)
print(d)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}
也可以指定一个(key,value)的列表作为 update()方法的参数。如果键与现有的键重合,它将被作为参数指定的值覆盖。
d = {'k1': 1, 'k2': 2}
d.update([('k1', 100), ('k3', 3), ('k4', 4)])
print(d)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}
结合zip()函数,可以从键的列表和值的列表中添加元素。
d = {'k1': 1, 'k2': 2}
keys = ['k1', 'k3', 'k4']
values = [100, 3, 4]
d.update(zip(keys, values))
print(d)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}
|= 操作符 (Python 3.9 及以后版本)
使用|=操作符,可以在右侧指定一个(键,值)的列表。
d = {'k1': 1, 'k2': 2}
d |= [('k1', 100), ('k3', 3), ('k4', 4)]
print(d)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}
请注意,用|操作符指定一个列表会导致错误。只支持字典到字典的操作。
# print(d | [('k1', 100), ('k3', 3), ('k4', 4)])
# TypeError: unsupported operand type(s) for |: 'dict' and 'list'