我在列表中有一个嵌套字典,如下所示:
my_list =
[{'id': '166073',
'ref': [{'MeSH': 'C548074'},
{'UMLS': 'C1969084'},
{'OMIM': '611523'},
{'ICD-10': 'Q04.3'}]},
{'id': '213',
'ref': [{'MeSH': 'D003554'},
{'UMLS': 'C0010690'},
{'MedDRA': '10011777'},
{'ICD-10': 'E72.0'},
{'OMIM': '219750'},
{'OMIM': '219800'},
{'OMIM': '219900'}]},
{'id': '333',
'ref': [{'UMLS': 'C2936785'},
{'ICD-10': 'E75.2'},
{'MeSH': 'C537075'},
{'MeSH': 'D055577'},
{'UMLS': 'C0268255'},
{'OMIM': '228000'}]}
.
.
.
]
我想将嵌套字典中具有相同键的字典合并为键中的列表,如下所示:
my_list =
[{'id': '166073',
'ref': [{'MeSH': 'C548074'},
{'UMLS': 'C1969084'},
{'OMIM': '611523'},
{'ICD-10': 'Q04.3'}]},
{'id': '213',
'ref': [{'MeSH': 'D003554'},
{'UMLS': 'C0010690'},
{'MedDRA': '10011777'},
{'ICD-10': 'E72.0'},
{'OMIM': ['219750', '219800', '219900']}]},
{'id': '333',
'ref': [{'UMLS': 'C2936785'},
{'ICD-10': 'E75.2'},
{'MeSH': ['C537075', 'D055577']},
{'UMLS': 'C0268255'},
{'OMIM': '228000'}]}
.
.
.
]
我尝试通过使用双for循环读取字典来合并并将信息存储到另一个新字典中,但我发现该方法不是最优的,是否有其他推荐的方法来完成这种合并?谢谢!
请您参考如下方法:
为什么它不是最优的? 我觉得这种合并应该就好了。 我假设您的合并是这样的:
my_list = [{'id': '166073',
'ref': [{'MeSH': 'C548074'},
{'UMLS': 'C1969084'},
{'OMIM': '611523'},
{'ICD-10': 'Q04.3'}]},
{'id': '213',
'ref': [{'MeSH': 'D003554'},
{'UMLS': 'C0010690'},
{'MedDRA': '10011777'},
{'ICD-10': 'E72.0'},
{'OMIM': '219750'},
{'OMIM': '219800'},
{'OMIM': '219900'}]},
{'id': '333',
'ref': [{'UMLS': 'C2936785'},
{'ICD-10': 'E75.2'},
{'MeSH': 'C537075'},
{'MeSH': 'D055577'},
{'UMLS': 'C0268255'},
{'OMIM': '228000'}]}]
def merge(item):
from collections import defaultdict
merged = defaultdict(list)
for ref in item.get('ref', []):
for key, val in ref.items():
merged[key].append(val)
return {**item, 'ref': dict(merged)}
print(list(map(merge, my_list)))
