dict1.update((k, dict2[k]) for k in set(dict2).intersection(dict1))
是我如何在Python 2.6或更低版本中执行此操作(请参阅有关如何在更高版本中执行此操作的更多内容)。
在另一个映射旁边,dict.update()
也可以采用可迭代的(key, value)
元组,我们根据两个词典的集合交集(因此它们具有共同的所有键)生成这些元组。
演示:
>>> dict1 = {'foo':'bar', 'ham': 'eggs'}
>>> dict2 = {'ham': 'spam', 'bar': 'baz'}
>>> dict1.update((k, dict2[k]) for k in set(dict2).intersection(dict1))
>>> dict1
{'foo': 'bar', 'ham': 'spam'}
在Python 2.7版,您可以使用新的Dict views来达到同样没有铸造集:
dict1.update((k, dict2[k]) for k in dict1.viewkeys() & dict2.viewkeys())
在Python 3,字典视图是默认的,所以可以替代拼写为:
dict1.update((k, dict2[k]) for k in dict1.keys() & dict2.keys())
这在我看来是低效的,但你可以去'[dict1.update({K:dict2 [K]})...',而不是使用'__setitem__ '。 – zigg 2013-02-18 16:55:16
'__setitem __()'不是'受保护的',因为它是一个内部的API钩子实现。您通常会直接使用该API,调用'dict1 [k] = dict2 [k]'或者使用'operator.setitem(dict1,k,dict2 [k])'代替。这里没有必要,但是这是你用来直接调用'__setitem __()'的方法。 – 2013-02-18 16:59:16