根据匹配的键值对将嵌套字典组合到嵌套字典列表中



我试着在谷歌上找到一个问题,这个问题与我的用例非常相似:根据匹配的键:值对在字典列表中组合字典。但它似乎并不完全符合我的情况,因为我有一个嵌套字典列表。假设我有一个嵌套字典列表(超过2个),但在这种情况下,我考虑了两个嵌套字典来制作示例:

my_list = [{'sentence': ['x',
'ray',
'diffractometry',
'has',
'been',
'largely',
'used',
'thanks',
'to',
],
'mentions': [{'mention': [27, 28],
'positives': [26278, 27735, 21063],
'negatives': [],
'entity': 27735}]},
{'sentence': ['x',
'ray',
'diffractometry',
'has',
'been',
'largely',
'used',
'thanks',
'to',
],
'mentions': [{'mention': [13, 14],
'positives': [7654],
'negatives': [],
'entity': 7654}]}]

我如何根据键(句子)和值(所有标记的列表)的匹配合并这两个字典,这样我就可以得到下面想要的结果:

my_new_list = [
{'sentence': ['x',
'ray',
'diffractometry',
'has',
'been',
'largely',
'used',
'thanks',
'to',
],
'mentions': [
{'mention': [27, 28],
'positives': [26278, 27735, 21063],
'negatives': [],
'entity': 27735
},
{'mention': [13, 14],
'positives': [7654],
'negatives': [],
'entity': 7654
}
]
}
]

如何合并关键"提及"列表;当匹配键(句子):值(所有令牌的列表)?在我的实际列表中,会有很多相同风格的字典。

非常感谢你的帮助。

my_dict = {}
for row in my_list:
key = ' '.join(row['sentence']) # use sentence as key
if key in my_dict:
my_dict[key]['mentions'].extend(row['mentions'])
else:
my_dict[key] = row

my_list = list(my_dict.values())

据我所知,您是想按"句子"对信息进行分组。

你可以通过迭代你的数组并填充一个以句子为索引的list字典来实现这一点。

类似:

from collections import defaultdict
sentences = defaultdict(list)
for element in my_list:
key = tuple(element["sentence"])
sentences[key].append(element)

得到

{ sentence1: [element1, element2], sentence2: [element3] }

从那里应该可以很容易地构造你想要的结构。

edit删除对特定字段的引用

相关内容

  • 没有找到相关文章

最新更新