根据匹配的 key:value 对将嵌套词典合并到嵌套词典列表中

combine nested dictionaries in list of nested dictionaries based on matching key:value pair

我尝试 google 并发现了一个与我的用例非常相似的问题:。但它似乎并不 100% 符合我的情况,因为我有嵌套词典列表。假设我有一个嵌套词典列表(超过 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
     }
   ]
}
]

如何在匹配key(sentence):value(list of all tokens)时合并key“mentions”列表?在我的实际列表中,会有很多相同风格的词典。

非常感谢您的帮助。

据我了解,您想按“句子”对信息进行分组。

您可以通过遍历数组并填充由句子索引的列表字典来完成此操作。

类似于:

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] }

从那里应该可以轻松构建你想要的结构。

编辑 删除了对特定字段的引用

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