合并两个(或更多)相同的字典,只有一个共同的值 - 在Python中

时间:2016-06-10 17:41:18

标签: python dictionary

我有两个(但可能是三个或更多)这样的词典

>>> d1
{'address': '', 'cf': 'DRSSFN88A26A459E', 'first_name': 'Stefano', 'last_name': ''}
>>> d2
{'address': 'Via Due Giugno, 25', 'cf': 'DRSSFN88A26A459E', 'first_name': '', 'last_name': ''}
>>> d3
{'address': '', 'cf': 'DRSSFN88A26A459E', 'first_name': '', 'last_name': 'Lauzi'}

所以,唯一的共同价值是cf.我希望将所有这些合并为一个收集每个字典中所有值的字符,例如

>>> d3
{'address': 'Via Due Giugno, 25', 'cf': 'DRSSFN88A26A459E', 'first_name': 'Stefano', 'last_name': 'Lauzi'}

我怎么能这样做?

编辑:

我已经尝试了这个(只有两个dicts),但结果不是预期的

>>> def merge_two_dicts(d1, d2):
...     d = d1.copy()
...     d.update(d2)
...     return d

2 个答案:

答案 0 :(得分:3)

只使用字典理解:

>>> d = {i:v for q in [d1,d2,d3] for i,v in q.iteritems() if v != ''}
>>> d
{'first_name': 'Stefano', 'last_name': 'Lauzi', 'cf': 'DRSSFN88A26A459E', 'address': 'Via Due Giugno, 25'}

当然,如果您有不同的/ {唯一} cf值,这将不起作用,因为您必须在那里添加另一个条件 - 我将其留给您。

答案 1 :(得分:1)

dict.update更新每个密钥,即使该值为空。

>>> d = {'a':'hi'}
>>> d.update({'a':'', 'b':'hello'})
>>> d
{'a': '', 'b': 'hello'}

你可以通过理解轻松区分空值:

def merge_two_dicts(first, other):
    final = first.copy()
    final.update((k,v) for k,v in other.items() if v)
    return final

然后对任何数字进行概括,你可以采取不同数量的其他数字:

def merge_dicts(first,*others):
    final = first.copy()
    for d in others:
        final.update((k,v) for k,v in d.items() if v)
    return final

>>> merge_dicts(d1,d2,d3)
{'cf': 'DRSSFN88A26A459E', 'address': 'Via Due Giugno, 25', 'last_name': 'Lauzi', 'first_name': 'Stefano'}