首页 > 解决方案 > 基于匹配多个键:值对在列表中组合字典

问题描述

我是 python 的新手,我尝试用谷歌搜索并发现这个与我的情况非常相似:根据匹配的键:值对在字典列表中组合字典,但在我的情况下,假设我有一个如下列表:

[{'entity': 'Mechanical properties',
   'offsetstart': 0,
   'offsetend': 21,
   'id': 'c_4683'},
  {'entity': 'properties',
   'offsetstart': 11,
   'offsetend': 21,
   'id': 'c_49874'},
  {'entity': 'properties',
   'offsetstart': 11,
   'offsetend': 21,
   'id': 'c_13609'},
  {'entity': 'wood',
   'offsetstart': 33,
   'offsetend': 37,
   'id': 'c_8421'}]

匹配多个键:值对时如何组合键“id”的值(即键“entity”、“offsetstart”和“offsetend”的值)

所以我可以得到如下期望的结果:

[{'entity': 'Mechanical properties',
   'offsetstart': 0,
   'offsetend': 21,
   'id': 'c_4683'},
  {'entity': 'properties',
   'offsetstart': 11,
   'offsetend': 21,
   'id': ['c_49874', 'c_13609']},
  {'entity': 'wood',
   'offsetstart': 33,
   'offsetend': 37,
   'id': 'c_8421'}]

非常感谢您的帮助!

标签: pythonlistdictionary

解决方案


output_list = []

for entity_dict in initial_list:
    current_entity = entity_dict['entity']
    entity_dict['id'] = [entity_dict['id']] #Change string to list type

    for output_dict in output_list: # Check if same entity was catched
        if output_dict['entity'] == current_entity:
            output_dict['id'] += entity_dict['id']
            break
    else:  # Executed if break not found. In this case is the first entity of his type
        output_list.append(entity_dict)

print(output_list)

[{'entity': 'Mechanical properties', 'offsetstart': 0, 'offsetend': 21, 'id': ['c_4683']}, {'entity': 'properties', 'offsetstart': 11, 'offsetend': 21, 'id': ['c_49874', 'c_13609']}, {'entity': 'wood', 'offsetstart': 33, 'offsetend': 37, 'id': ['c_8421']}]

我建议您将输入列表更改为使用实体作为键的字典。一般来说,字典列表不是一个好主意。


推荐阅读