Note: In Python 3, this will only work if every key in basket_two is a string.
12
a.update(b)
将b中的键和值添加到a,如果已经存在键的值,则覆盖 .
17
正如其他人所提到的, a.update(b) 对于某些词组 a 和 b 将达到您在问题中要求的结果 . 但是,我想指出很多次我看到映射/设置对象的 extend 方法希望在语法 a.extend(b) 中, a 的值不应该被 b 的值覆盖 . a.update(b) 覆盖 a 's values, and so isn'是 extend 的不错选择 .
def extend(a,b):
"""Create a new dictionary with a's properties extended by b,
without overwriting.
>>> extend({'a':1,'b':2},{'b':3,'c':4})
{'a': 1, 'c': 4, 'b': 2}
"""
return dict(b,**a)
感谢Tom Leys为 extend 使用无副作用的 dict 构造函数 .
22
您是否尝试过使用字典映射的字典理解:
c = {**a, **b}
# c = { "a" : 1, "b" : 2, "c" : 3, "d" : 4 }
5 回答
Python Standard Library Documentation
this closed question中的一颗美丽宝石:
“oneliner方式”,既不改变输入词,也是
了解**basket_two (the **) means here .
如果发生冲突,
basket_two
中的项目将覆盖basket_one
中的项目 . 作为单行人员,这是非常可读和透明的,并且我没有任何强制反对使用它的任何时候一个混合的两个其他人派上用场(任何难以理解它的读者实际上将得到很好的服务这促使他或她学习dict
和**
形式;-) . 因此,例如,使用如下:在我的代码中经常发生 .
最初由Alex Martelli提交
Note: In Python 3, this will only work if every key in basket_two is a string.
将b中的键和值添加到a,如果已经存在键的值,则覆盖 .
正如其他人所提到的,
a.update(b)
对于某些词组a
和b
将达到您在问题中要求的结果 . 但是,我想指出很多次我看到映射/设置对象的extend
方法希望在语法a.extend(b)
中,a
的值不应该被b
的值覆盖 .a.update(b)
覆盖a
's values, and so isn'是extend
的不错选择 .请注意,某些语言将此方法称为
defaults
或inject
,因为它可以被视为将b的值(可能是一组默认值)注入字典而不会覆盖可能已存在的值的方法 .当然,您可以简单地注意到
a.extend(b)
与b.update(a); a=b
几乎相同 . 要删除分配,您可以这样做:感谢Tom Leys为
extend
使用无副作用的dict
构造函数 .您是否尝试过使用字典映射的字典理解: