在Python中向字典添加元素和加入字典。

商业

本节解释了如何在 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'