python - 是否有任何 pythonic 方法来组合两个字典(为公共(public)值制作一个列表)?

标签 python python-2.7 dictionary

例如,我有两个字典。

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}

使用 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() 是一个字典 View ,因此您只需将所有 .viewkeys() 调用替换为 .keys() 以获得相同的功能。

关于python - 是否有任何 pythonic 方法来组合两个字典(为公共(public)值制作一个列表)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22892216/

相关文章:

python - 在字典项列表中查找最小和最大元素

python - Ansible错误: "The Python 2 bindings for rpm are needed for this module"

python - Pandas to_hdf() TypeError : object of type 'int' has no len()

Python:为什么 [0,1,2][-1:1] 不引发错误?

python - 在 SQL 中搜索一个字段以查看它是否包含 python 变量

python - 如何更改字典的键和值

python - 无法安装dlib,永远卡在98%

c++ - 无法运行bjam编译boost python教程

Python Facebook 'NoneType object error'

java - 如何迭代hashmap,是否需要在Java中强制转换keySet()?