Skip to main content
 首页 » 编程设计

python之在嵌套字典中将多个相同的键合并为一个

2025年05月04日16davidwang456

我在列表中有一个嵌套字典,如下所示:

      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)))