【发布时间】:2020-08-11 09:00:54
【问题描述】:
我在这里扩展我原来的问题:How to append/merge list of dictionaries?。
我正在尝试在包含列表的单个字典列表之间合并一些数据。如果它们匹配,则合并将基于“object”和“semver”键进行。如果匹配相同的值,也会添加到他们给定的“部分”。给定以下数据:
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"
},
{
"semver":"2.0.0",
"sections":[
{
"name":"Fix",
"messages":[
"2.0.0 Fix Comment here"
]
}
],
"object":"files.sh"
},
{
"semver":"2.0.0",
"sections":[
{
"name":"Add",
"messages":[
"2.0.0 Add Comment here"
]
}
],
"object":"files.sh"
},
{
"semver":"2.0.0",
"sections":[
{
"name":"Add",
"messages":[
"2.0.0 comment for the NewFile"
]
}
],
"object":"NewFile.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"
},
{
"semver":"2.0.0",
"sections":[
{
"name":"Add",
"messages":[
"2.0.0 Add comment here",
]
},
{
"name":"Fix",
"messages":[
"2.0.0 Fix Comment here"
]
}
],
"object":"files.sh"
},
{
"semver":"2.0.0",
"sections":[
{
"name":"Add",
"messages":[
"2.0.0 comment for the NewFile"
]
}
],
"object":"NewFile.sh"
},
]
代码块
objects = {} # mapping for object: object_data with sections
sections = defaultdict(list) # mapping for object: all sections
for d in data:
print(d["semver"])
for k, v in list(d.items()):
if v == d["semver"]:
try:
section = d.pop("sections")
sections[d["object"]].extend(section)
objects[d["object"]] = d # populate with object data without sections
except Exception as e:
print(e)
pass
output = []
for object_name, object_data in objects.items():
object_data["sections"] = sections[object_name]
output.append(object_data)
到目前为止,我正在循环遍历 dict 中的每个 k,v 对,但我无法理解这两个版本之间的匹配并在循环中附加到特定的 dict。
【问题讨论】:
-
澄清一下,您想连接
sections列表以获得object和semver的相同组合,对吗? -
是的,没错
标签: python list dictionary merge append