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

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

问题描述

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

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)

任何指示或帮助将不胜感激.到目前为止,我正在遍历 dict 中的每个 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天全站免登陆