[英]Is there any pythonic way to combine two dicts (adding values for keys that appear in both)?
[英]Is there any pythonic way to combine two dicts (making a list for common values)?
例如,我有兩個字典。
A = {'a':1, 'b':10, 'c':2}
B = {'b':3, 'c':4, 'd':10}
我想要這樣的結果:
{'a':1, 'b': [10, 3], 'c':[2, 4], 'd':10}
如果一個鍵出現在兩個字典中,我想列出兩個值。
我會列出所有值:
{k: filter(None, [A.get(k), B.get(k)]) for k in A.viewkeys() | B}
使用字典視圖對象。
演示:
>>> A = {'a':1, 'b':10, 'c':2}
>>> B = {'b':3, 'c':4, 'd':10}
>>> {k: filter(None, [A.get(k), B.get(k)]) for k in A.viewkeys() | B}
{'a': [1], 'c': [2, 4], 'b': [10, 3], 'd': [10]}
這至少可以使您的值類型保持一致。
要生成輸出,您需要使用兩個字典之間的集合交集和對稱差異:
dict({k: [A[k], B[k]] for k in A.viewkeys() & B},
**{k: A.get(k, B.get(k)) for k in A.viewkeys() ^ B})
演示:
>>> dict({k: [A[k], B[k]] for k in A.viewkeys() & B},
... **{k: A.get(k, B.get(k)) for k in A.viewkeys() ^ B})
{'a': 1, 'c': [2, 4], 'b': [10, 3], 'd': 10}
在 Python 3 中, dict.keys()
是一個字典視圖,因此您可以將所有.viewkeys()
調用替換為.keys()
以獲得相同的功能。
我會贊同 Martijn Pieters 的概念,即您可能希望結果字典中的所有值都具有相同的類型。
給出第二個選項:
您還可以使用defaultdict非常直觀地實現您的結果。
defaultdict 類似於 dict,但它有一個默認構造函數,如果鍵尚不存在,則調用該構造函數。
所以你會去:
from collections import defaultdict
A = {'a':1, 'b':10, 'c':2}
B = {'b':3, 'c':4, 'd':10}
result = defaultdict(list)
for d in [A, B]:
for k, v in d.items():
result[k].append(v)
然后在稍后階段,您仍然可以輕松地為結果添加更多值。
你也可以切換到
defaultdict(set)
如果你不想重復值
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.