python - 基于匹配多个键:值对在列表中组合字典
问题描述
我是 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'}]
非常感谢您的帮助!
解决方案
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']}]
我建议您将输入列表更改为使用实体作为键的字典。一般来说,字典列表不是一个好主意。
推荐阅读
- python - TypeError:预期元指定类型 DataFrame,从 Dask 获得类型 pandas.core.frame.DataFrame
- node.js - 在heroku上部署时前后没有连接
- python - 如果继承的类不正确,请根据我在 `__init__` 函数中尝试实现的内容进行更新
- python - 这个 Matplotlib 代码片段是如何工作的
- click - 如何使用 tablesorter 允许单击位于主题内的按钮?
- html - 如何防止输入数据后调整行大小
- r - 将大列表的元素取消嵌套到数据框中
- javascript - 用 Puppeteer 注入函数
- android - 查找适用于 Android 的单独 REST API 密钥和 MAP SDK 密钥 - mapmyindia API
- lua - 如何使用hammerspoon CLI?