合并保留重复键值的字典

发布于 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 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。
    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声明之前。但是,我无法真正想象何时要删除列表。(考虑将列表作为值的情况;然后删除项目周围的列表会导致模棱两可的情况。)



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看