我有一个列表。列表中的每个元素都是这样的:
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
键。