合并嵌套字典和字典列表,python
merge nested dictionary and list of dictionaries, 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
,如果有,它将添加它。如果那里没有id GPP_companies
它returns 一个什么都不做的空字典。
取决于您在以下情况下要执行的操作:
- 在
GPP_companies
中没有 CompanyId
?
- 如果
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'}]
"""
对于python 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
.
我想合并两个具有轻微结构的嵌套字典(一个是字典列表,另一个是嵌套字典)。非常感谢您的帮助!
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
,如果有,它将添加它。如果那里没有id GPP_companies
它returns 一个什么都不做的空字典。
取决于您在以下情况下要执行的操作:
- 在
GPP_companies
中没有CompanyId
? - 如果
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'}]
"""
对于python 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
.