Python-追加/合并字典列表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python-追加/合并字典列表相关的知识,希望对你有一定的参考价值。

我正在尝试在其中包含列表的单个词典列表之间合并一些数据。如果匹配,将基于“对象”键进行合并。如果匹配相同的值,还将添加到其给定的“部分”中。给定以下数据:

data = [
        {
         "semver":"1.0.0",
         "sections":[
            {
               "name":"Add",
               "messages":[
                  "add: comment here"
               ]
            }
         ],
         "object":"files.sh"
      },
      {
         "semver":"1.0.0",
         "sections":[
            {
               "name":"Add",
               "messages":[
                  "add: Second comment here"
               ]
            }
         ],
         "object":"files.sh"
      },
      {
         "semver":"1.0.0",
         "sections":[
            {
               "name":"Fix",
               "messages":[
                  "Comment here"
               ]
            }
         ],
         "object":"files.sh"
      }
]

我希望最终实现这一目标

data = [
        {
         "semver":"1.0.0",
         "sections":[
            {
               "name":"Add",
               "messages":[
                  "add: comment here",
                  "add: Second comment here"
               ]
            },
            {
               "name":"Fix",
               "messages":[
                  "Fix: comment here"
               ]
            }
         ],
         "object":"files.sh"
      },
]

for item in data:
    for k, v  in item.items():
        print(k)
        print(v)

任何指针或帮助将不胜感激。到目前为止,我遍历了字典中的每个k,v对,但是无法将我的头缠在循环中两者之间的匹配上。

再次感谢

答案

下面的代码将为您完成任务,但是请注意,这可能不是最省时的方法,如果您无法使所有字典中的键都保持一致,则可能会遇到一些键错误。

d = []
for x in data:
    for y in d:
        if x['object'] == y['object']:
            for section in x['sections']:
                for sectiony in y['sections']:
                    if section['name'] == sectiony['name']:
                        sectiony['messages'].extend(x for x in
                                section['messages'] if x not in sectiony['messages'])
                        break
                else:
                    y['sections'].append(section)
            break
    else:
        d.append(x)

输出

[
    {
        "semver": "1.0.0",
        "object": "files.sh",
        "sections": [
            {
                "messages": [
                    "add: comment here",
                    "add: Second comment here"
                ],
                "name": "Add"
            },
            {
                "messages": [
                    "Comment here"
                ],
                "name": "Fix"
            }
        ]
    }
]

以上是关于Python-追加/合并字典列表的主要内容,如果未能解决你的问题,请参考以下文章

python列表里的字典元素合并去重

Python代码阅读(第19篇):合并多个字典

python将字典追加到列表

将一个嵌套字典中的选择项追加到另一个

追加到 json 中转储的字典列表,而不用 python 加载列表

Python对字典列表进行去重追加