例如,我有两个字典。
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()
是一个字典 View ,因此您只需将所有 .viewkeys()
调用替换为 .keys()
以获得相同的功能。
关于python - 是否有任何 pythonic 方法来组合两个字典(为公共(public)值制作一个列表)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22892216/