加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 合并字典保留重复键的值

发布时间:2020-12-20 12:06:54 所属栏目:Python 来源:网络整理
导读:给定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):..
给定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}]

生成一个新字典的最佳方法是什么,该字典会产生这些重复键的值列表?

解决方法

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,4],'c': [3],'d': [6]}

这个问题略有不同.这里所有字典值都是列表.如果长度为1的列表不需要,则添加:

for key in d:
        if len(d[key]) == 1:
            d[key] = d[key][0]

在return d语句之前.但是,我无法想象你什么时候想要删除列表. (考虑将列表作为值的情况;然后删除项目周围的列表会导致模糊的情况.)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读