如何根据每个元素中的某些信息对列表的元素进行分组?



我有一个列表。列表中的每个元素都是这样的:

list[0]={'Keywords': ' foster care case aide ',
'categoryId': '1650',
'result': {'categoryId': '1650',
'categoryName': 'case aide',
'score': '1.04134220123291'}}

可以收集同一组中具有相同categoryId的所有关键字。计算每个categoryId有多少个keywords

如果不行请告诉我

您可以使用collections.defaultdict为每个categoryId创建一个set,并添加相关的单词:

from collections import defaultdict
output = defaultdict(set)
for entry in list:
kwds = entry['Keywords'].strip().split(' ')
for word in kwds:
output[entry['categoryId']].add(word)

我使用set,因为我假设你不希望在每个categoryId中重复单词。您可以使用list或其他集合。

你可以得到每个ID的大小:

for k, v in output.items():
print(f'ID: {k}, words: {len(v)}')
# ID: 1650, words: 4

回复OP的评论:

如果您得到KeyError: 'categoryId',这意味着一些条目没有'categoryId'键。如果您只想跳过这些条目,可以在上面的解决方案中添加一个小catch:

for entry in list:
# catch if there is a missing ID field
if entry.get('categoryId', None) is None: 
continue

# otherwise the same
kwds = entry['Keywords'].strip().split(' ')
for word in kwds:
output[entry['categoryId']].add(word)

如果没有categoryID,该条目将被跳过。

请注意,我们也依赖于"Keywords"字段,所以你可能需要为它添加一个catch。

或者,如果您想从没有ID的条目中收集所有关键字,您可以在原始解决方案中使用dict.get():

for entry in data:
kwds = entry['Keywords'].strip().split(' ')
for word in kwds:
output[entry.get('categoryId', None)].add(word)

现在如果没有categoryId,则将关键字添加到output中的None键。

相关内容

  • 没有找到相关文章

最新更新