合并嵌套字典和字典列表,python



我想组合两个具有轻微结构的嵌套字典(一个是字典列表,另一个是嵌套字典)。我将非常感谢你的帮助!

GPP_projects =
[{'CompanyId': 61149,
'Id': 44},
{'CompanyId': 61307,
'Id': 45}]
GPP_companies = 
{61149: {
'Name': 'xyz',
'CompanyId': 61149},
61307: {
'Name': 'abc',
'CompanyId': 61307}}
#wanted outcome
GPP_combined =
[{'CompanyId': 61149,
'Id': 44,
'Name': 'xyz'}
{'CompanyId': 61307,
'Id': 45,
'Name': 'abc'}}]

您可以使用pandas方法,或者您可以简单地执行以下操作


GPP_combined = [{**data, **GPP_companies.get(data['CompanyId'], {})} for data  in GPP_projects]

这将检查GPP_companies字典中是否存在CompanyId,如果存在则将其添加进去。如果在GPP_companies中没有id,它返回一个空字典,什么也不做。

取决于你想在以下情况下做什么:

  • noCompanyIdinGPP_companies?
  • 如果GPP_companies中有错误,这意味着{**a, **b}将覆盖GPP_projects中的有效字段

输出

GPP_projects =[{'CompanyId': 61149,
'Id': 44},
{'CompanyId': 61307,
'Id': 45,}]
GPP_companies = {61149: {
'Name': 'xyz',
'CompanyId': 61149},
61307: {
'Name': 'abc',
'CompanyId': 61307}}
#wanted outcome
GPP_combined =[{'CompanyId': 61149,
'Id': 44,
'Name': 'xyz'},
{'CompanyId': 61307,
'Id': 45,
'Name': 'abc'}]
GPP_combined = [
{**data, **GPP_companies.get(data["CompanyId"], {})} 
for data in GPP_projects
]
"""
>> GPP_combined
[{'CompanyId': 61149, 'Id': 44, 'Name': 'xyz'},
{'CompanyId': 61307, 'Id': 45, 'Name': 'abc'}]
"""

forpython 2.7

for data in GPP_projects:
company_id = data['CompanyId']
company_obj = GPP_companies.get(company_id)
if company_rec:
data['Name'] = company_obj['Name']

这修改了GPP_projects,或者你可以做一个副本,以确保你没有修改GPP_projects

相关内容

  • 没有找到相关文章

最新更新