如何追加/合并字典列表? [英] How to append/merge list of dictionaries?

查看:105
本文介绍了如何追加/合并字典列表?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I'm trying to merge some data between a single List of dictionaries that has lists inside. Merging would happen based on the "object" key if they matched. Also adding to their given "section" if the same value was matched. Given the following data:

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"
      }
]

我希望最终实现这一目标

I would like to achieve this as a end result

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对中进行循环,但是无法绕过循环中两者之间的匹配.

Any pointers or help would be greatly appreciated. So far I am looping through each k,v pair in the dict's but cant wrap my head around matching between the two in the loop.

推荐答案

尝试以下方法:

import json # just for pretty print, you don't have to use it
from collections import defaultdict

objects = {} # mapping for object: object_data with sections
sections = defaultdict(list) mapping for object: all sections
for d in data:
    section = d.pop("sections")
    sections[d["object"]].extend(section)  # extends the sections for the object
    objects[d["object"]] = d  # # populate with object data without sections

# merge between sections and objects by object key
output = []
for object_name, object_data in objects.items():
    object_data["sections"] = sections[object_name]
    output.append(object_data)
print(json.dumps(output,indent=4)) # just for pretty print

这篇关于如何追加/合并字典列表?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆