基于嵌套列表值合并字典列表的实现方法咨询
基于嵌套列表值合并字典列表的实现方法咨询
我现在正纠结于如何基于两个输入列表创建一个新的列表,举个例子:
data_1 = [ { "title": "System", "priority": "medium", "subtitle": "mason", "files": [ {"name": "mason", "path": "/tmp/mason/mason.json"}, {"name": "mason", "path": "/tmp/mason/build.json"} ]}, { "title": "System", "priority": "medium", "subtitle": "kylie", "files": [ {"name": "kylie", "path": "/tmp/kylie/build.tar"}, {"name": "kylie", "path": "/tmp/kylie/kylie.json"} ]} ] data_2 = [ { "title": "System", "priority": "medium", "files": [ {"name": "build", "path": "/tmp/kylie/build.tar"}, {"name": "kylie", "path": "/tmp/kylie/kylie.json"}, {"name": "mason", "path": "/tmp/mason/mason.json"}, {"name": "build", "path": "/tmp/mason/build.json"} ]} ] merged = [ { "title": "System", "priority": "medium", "subtitle": "mason", "files": [ {"name": "mason", "path": "/tmp/mason/mason.json"}, {"name": "build", "path": "/tmp/mason/build.json"} ]}, { "title": "System", "priority": "medium", "subtitle": "kylie", "files": [ {"name": "build", "path": "/tmp/kylie/build.tar"}, {"name": "kylie", "path": "/tmp/kylie/kylie.json"} ]} ]
简单来说,保留data_1里的数据,只把files.name替换成data_2中相同path对应的name就行;或者也可以把data_2的元素拆分,给每个拆分后的元素加上subtitle,同时删掉data_2.files中那些和data_1里路径不匹配的项。
我自己刚开始写了点代码,但感觉越写越乱:
for d1 in data_1: for d2 in data_2: d1_key = (d1.get("title"), d1.get("priority")) d2_key = (d1.get("title"), d1.get("priority")) if d1_key == d2_key: for df in d1.get("files"): if any(df.get("path") in entry.get("path") for entry in d2.get("files")): print("Help! There must be easier way!")
我觉得这个思路不够清晰,没法继续往下写了。
有没有更简洁的方法能生成目标的merged列表呀?
备注:内容来源于stack exchange,提问作者AbreQueVoy
相关产品推荐
相关产品推荐

