合并保留重复键值的字典
发布于 2021-01-29 17:24:46
给定n个字典,编写一个函数,该函数将返回唯一字典,其中包含重复键的值列表。
例:
d1 = {'a': 1, 'b': 2}
d2 = {'c': 3, 'b': 4}
d3 = {'a': 5, 'd': 6}
结果:
>>> newdict
{'c': 3, 'd': 6, 'a': [1, 5], 'b': [2, 4]}
到目前为止,我的代码:
>>> def merge_dicts(*dicts):
... x = []
... for item in dicts:
... x.append(item)
... return x
...
>>> merge_dicts(d1, d2, d3)
[{'a': 1, 'b': 2}, {'c': 3, 'b': 4}, {'a': 5, 'd': 6}]
生成新字典为这些重复键生成值列表的最佳方法是什么?
关注者
0
被浏览
142
1 个回答
-
def merge_dicts(*dicts): d = {} for dict in dicts: for key in dict: try: d[key].append(dict[key]) except KeyError: d[key] = [dict[key]] return d
这重奏:
{'a': [1, 5], 'b': [2, 4], 'c': [3], 'd': [6]}
这个问题略有不同。这里所有的字典值都是列表。如果对于长度为1的列表不希望如此,则添加:
for key in d: if len(d[key]) == 1: d[key] = d[key][0]
在
return d
声明之前。但是,我无法真正想象何时要删除列表。(考虑将列表作为值的情况;然后删除项目周围的列表会导致模棱两可的情况。)