【问题标题】:How to combine two lists of dictionaries of multiple entries如何组合多个条目的两个字典列表
【发布时间】:2021-07-09 11:04:11
【问题描述】:

我有两个字典列表,我想合并或合并它们。这里的障碍是我想根据键值组合它们,而这个键值在每次迭代中都是不同的,它们不是固定的,我该如何实现呢? 以下是我需要合并的两个字典列表。

l1 = [
    {'Fvcm':{
            'name' :'FVCM',
            'size' : 8,
             'Type' : 'Z'
            }
    },
    {'RPZM':{
            'name' :'RPZM',
            'size' : 8,
             'Type' : 'R'
            },
    },
    {'ZAN':{
            'name' :'ZAN',
            'size' : 8,
             'Type' : 'P'
            }
    }
    ]

l2 = [
    {'Fvcm':{
            'name' :'FVCM',
            'map' : 'Prim1'
            }
    },
    {'RPZM':{
            'name' :'RPZM',
            'map' : 'Prim2'
            },
    },
    {'ZAN':{
            'name' :'ZAN',
            'map' : 'Prim3'
            }
    }
    ]

我希望最终结果看起来像:

l3 = [
    {'Fvcm':{
            'name' :'FVCM',
            'map' : 'Prim1',
            'size' : 8,
             'Type' : 'Z'
            }
    },
    {'RPZM':{
            'name' :'RPZM',
            'map' : 'Prim2',
            'size' : 8,
             'Type' : 'R'
            },
    },
    {'ZAN':{
            'name' :'ZAN',
            'map' : 'Prim3',
            'size' : 8,
             'Type' : 'P'
            }
    }
    ]

提前致谢!

【问题讨论】:

  • 到目前为止你尝试了什么?
  • @music_junkie 目前我所做的是使用嵌套的 for 循环来迭代项目,当键匹配时,我将它们组合起来并将它们添加到另一个列表中。我正在检查除了我正在使用的方法之外是否有优化的方法。

标签: python list dictionary merge


【解决方案1】:

您可以使用update,将两个字典合并在一起。这需要将嵌套的字典列表结构修改为非嵌套字典:

d1 = {k: v for item in l1 for k, v in item.items()} # regular k,v dict
d2 = {k: v for item in l2 for k, v in item.items()} # same
_ = [d1[k].update(v) for (k, v) in d2.items()]      # update each key in d1 with its corresponding value from d2
print(d1)

输出:

{'Fvcm': {'name': 'FVCM', 'size': 8, 'Type': 'Z', 'map': 'Prim1'}, 'RPZM': {'name': 'RPZM', 'size': 8, 'Type': 'R', 'map': 'Prim2'}, 'ZAN': {'name': 'ZAN', 'size': 8, 'Type': 'P', 'map': 'Prim3'}}

【讨论】:

  • 我对更新感到困惑!谢谢:)
【解决方案2】:
l3 = []

for key in l1:
  l3.append(key)

for key in l2:
  l3.append(key)

print(l3)

output:

[
{'Fvcm': 
{'name': 'FVCM', 
'size': 8, 
'Type': 'Z'}},

{'RPZM': 
{'name': 'RPZM', 
'size': 8, 
'Type': 'R'}},

{'ZAN': 
{'name': 'ZAN', 
'size': 8, 
'Type': 'P'}},

{'Fvcm': 
{'name': 'FVCM', 
'map': 'Prim1'}},

{'RPZM': 
{'name': 'RPZM', 
'map': 'Prim2'}},

{'ZAN': 
{'name': 'ZAN', 
'map': 'Prim3'}}
]

【讨论】:

    猜你喜欢
    • 2016-01-02
    • 1970-01-01
    • 1970-01-01
    • 2018-10-05
    • 2013-09-11
    • 1970-01-01
    • 1970-01-01
    • 2019-07-03
    相关资源
    最近更新 更多