【发布时间】:2015-07-09 16:35:27
【问题描述】:
此问题与类似的字典合并问题的不同之处在于,冲突的重复项应该失败,或者返回 False。其他解决方案使用优先规则来决定如何管理一个键何时可能映射到两个不同的变量。
如何在 python 中有效地合并两个字典。例如,考虑:
d1 = {'x': 'a', 'y': 'b', 'z': 'c'}
d2 = {'z': 'c', 'w': 'r'}
d3 = {'z': 'd', 'w': 'r'}
所以,合并字典 1 和 2 的结果是
{'x': 'a', 'y': 'b', 'z': 'c', 'w': 'r'}
但是 1 和 3 或 2 和 3 的合并应该会失败,因为 z 有冲突。
我的解决办法是:
def merge_dicts(d1,d2):
k1=d1.keys()
k2=d2.keys()
unified_dict=dict()
for k in k1:
# look up in second dictionary
if k in k2:
pt=d2[k] #pt stands for 'plain text'
# if lookup is a contradiction, return empty dictionary
# don't even bother with partial results
if pt!=d1[k]:
return dict()
else:
unified_dict[k]=d1[k] # safe: key is consistent
else:
unified_dict[k]=d1[k] # safe: no key in k2
# get the rest
# already resolved intersection issues so just get set difference
for k in d2.keys():
if k not in d1.keys():
unified_dict[k]=d2[k]
return unified_dict
有什么改进吗?
【问题讨论】:
标签: python dictionary merge