python - 根据值对字典列表进行分组/计数

标签 python list aggregate-functions

我有一个 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/

相关文章:

python - 创建数据框时限制元组列表中的列

mysql - SQL使用不同条件多次选择列

python - 如何通过 python 沿着已知长度的 3D 矢量进行循环

python - 如何从字符串中解析timedelta

python - 如何在 Python 中不使用循环和 join() 将列表转换为字符串

java - 对随机传入数据进行排序的内存和时间高效方法

scala - 如何将 Iterable 转换为 RDD

sql - PostgreSQL:按时间间隔聚合记录

python - Odoo Many 2 Many 选择字段

python - 在 Python turtle 中获取鼠标点击坐标