例如,我有两个听写。

A = {'a':1, 'b':10, 'c':2}
B = {'b':3, 'c':4, 'd':10}

我想要这样的结果:
{'a':1, 'b': [10, 3], 'c':[2, 4], 'd':10}

如果两个dict中都出现一个键,我想列出这两个值。

最佳答案

我会列出所有的价值观:

{k: filter(None, [A.get(k), B.get(k)]) for k in A.viewkeys() | B}

使用dictionary view objects
演示:
>>> 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()调用,以获得相同的功能。

关于python - 有什么pythonic的方法可以将两个字典组合在一起(为常用值制作一个列表)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22892216/

10-14 10:46
查看更多