什么是良好的1-liner(除了将其置于函数中)以实现此目的:
# like dict1.update(dict2) but does not add any keys from dict2
# that are not already in dict1
for k in dict1:
if k in dict2:
dict1[k]=dict2[k]
Run Code Online (Sandbox Code Playgroud)
我想这可行,但使用"受保护"功能:
[dict1.__setitem__(k, dict2[k]) for k in dict1 if k in dict2]
Run Code Online (Sandbox Code Playgroud)
Mar*_*ers 12
dict1.update((k, dict2[k]) for k in set(dict2).intersection(dict1))
Run Code Online (Sandbox Code Playgroud)
我是如何在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'}
Run Code Online (Sandbox Code Playgroud)
在python 2.7中,您可以使用新的Dict视图来实现相同的功能,而无需转换为集合:
dict1.update((k, dict2[k]) for k in dict1.viewkeys() & dict2.viewkeys())
Run Code Online (Sandbox Code Playgroud)
在Python 3中,dict视图是默认视图,因此您可以将其拼写为:
dict1.update((k, dict2[k]) for k in dict1.keys() & dict2.keys())
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1878 次 |
| 最近记录: |