我有一个 token 列表,看起来像这样:
[{
Value: "Blah",
StartOffset: 0,
EndOffset: 4
}, ... ]
我想做的是计算每个值在标记列表中出现的次数。
在 VB.Net 中我会做类似...
Tokens = Tokens.
GroupBy(Function(x) x.Value).
Select(Function(g) New With {
.Value = g.Key,
.Count = g.Count})
Python 中的等价物是什么?
最佳答案
IIUC,你可以使用collections.Counter
:
>>> from collections import Counter
>>> tokens = [{"Value": "Blah", "SO": 0}, {"Value": "zoom", "SO": 5}, {"Value": "Blah", "SO": 2}, {"Value": "Blah", "SO": 3}]
>>> Counter(tok['Value'] for tok in tokens)
Counter({'Blah': 3, 'zoom': 1})
如果你只需要一个计数。如果你想让它们按值分组,你可以使用 itertools.groupby
和类似的东西:
>>> from itertools import groupby
>>> def keyfn(x):
return x['Value']
...
>>> [(k, list(g)) for k,g in groupby(sorted(tokens, key=keyfn), keyfn)]
[('Blah', [{'SO': 0, 'Value': 'Blah'}, {'SO': 2, 'Value': 'Blah'}, {'SO': 3, 'Value': 'Blah'}]), ('zoom', [{'SO': 5, 'Value': 'zoom'}])]
虽然它有点棘手,因为 groupby
要求分组的术语是连续的,因此您必须先按键排序。
关于python - 根据值对字典列表进行分组/计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15815976/