【问题标题】:How do I merge dictionaries in list that have equal value and concate values that are not equal?如何合并列表中具有相等值和不相等的连接值的字典?
【发布时间】:2020-02-07 10:46:30
【问题描述】:

有字典列表:

[
    {
        "id" : 2.0,
        "code" : "12345"
    },
    {
       "id" : 2.0,
       "code" : "23456"
    },
    {
       "id" : 4.0,
       "code" : "6767"
    },
    {
       "id" : 5.0,
       "code" : "567"
    },
    {
       "id" : 4.0,
       "code" : "55657"
    }
]

我想合并具有共同 id 的 dict, 那么我想要你看到的这个列表:

[
    {
        "id" : 2.0,
        "code" : "12345,23456"
    },
    {
        "id" : 4.0,
        "code" : "6767,55657"
    },
    {
        "id" : 5.0,
        "code" : "567"
    }
]

有没有更快的方法可以在 for 循环中检查所有这些?

【问题讨论】:

  • 不,不是……谢谢

标签: python-3.x dictionary merge


【解决方案1】:

您可以构建一个字典,其中包含您的 id 值作为键,并且值是具有 commune id 的代码列表,然后您可以使用列表理解构建您想要的输出:

from collections import defaultdict

result = defaultdict(list)
for d in my_list:
    result[d['id']].append(d['code'])

final_list = [{'id': k, 'code': ', '.join(v)} for k, v in result.items()]

print(final_list)

输出:

[{'id': 2.0, 'code': '12345, 23456'},
 {'id': 4.0, 'code': '6767, 55657'},
 {'id': 5.0, 'code': '567'}]

【讨论】:

  • 非常感谢。如果 dict 中有其他相同的字段具有相同的 id ,例如 "name" 键,如何保留它们?[ { "id" : 2.0, "code" : " 12345","name":"x" }, { "id" : 2.0, "code" : "23456","name":"x" }]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-28
  • 2022-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多