我有两个(但可能是三个或更多)这样的词典
>>> 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
答案 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'}