Python:字典的分组和聚合列表[无计数器]

Posted

技术标签:

【中文标题】Python:字典的分组和聚合列表[无计数器]【英文标题】:Python: Group and aggregate list of dictionaries [without Counter] 【发布时间】:2015-06-22 08:31:13 【问题描述】:

我遇到了一个与此线程中描述的完全一样的问题:Group by and aggregate the values of a list of dictionaries in Python

给定的解决方案完美运行,但不适用于低于 Python 2.7 的任何版本,我正在尝试保持与 2.6.6 的兼容性。

我的数据看起来像这样(从上面的链接线程中窃取):

my_dataset = [  
    
        'type': 'type1',
        'value1': 10
    ,
    
        'type': 'type2',
        'value2': 10
    ,
    
        'type': 'type1,
        'value1': 10
    
]

这就是我希望它返回的内容:

[
    
        'type': 'type1',
        'value1': 20
    ,
    
        'type': 'type2',
        'value1': 10
    
]

不使用 Counter 最有效的方法是什么?

更新

Aprillion 在下面发表评论并将我引导至 backport_collections,这看起来应该正是我所需要的,但我的 2.6.6 版本仍然出现错误。

函数如下所示:

from backport_collections import defaultdict, Counter
def group_and_sum_dataset(dataset, group_by_key, sum_value_keys, sort_by_key):

    container = defaultdict(Counter)

    for item in dataset:
        key = item[group_by_key]
        values = k: item[k] for k in sum_value_keys
        container[key].update(values)

    new_dataset = [
        dict([(group_by_key, item[0])] + item[1].items())
        for item in container.items()
    ]
    new_dataset.sort(key=lambda item: item[sort_by_key], reverse=True)

    return new_dataset

当我尝试运行它时,我得到一个语法错误:

values = k: item[k] for k in sum_value_keys
                       ^
SyntaxError: invalid syntax

在 2.7 上仍然运行良好。现在甚至不确定这是否与 Counter 相关。

【问题讨论】:

pypi.python.org/pypi/backport_collections/0.1 ? 谢谢@Aprillion,请看我上面的更新。 2.6 不支持字典压缩。需要做的:values = dict(((k,item[k]) for k in sum_value_keys)) 【参考方案1】:

您遇到的问题是您正在尝试执行直到 python 2.7 才添加的字典理解。

values = dict((k, item[k]) for k in sum_value_keys)

【讨论】:

啊!谢谢。作为一个 Python 菜鸟,我完全错过了这一点。然后很好地解决了两个兼容性问题。干杯!

以上是关于Python:字典的分组和聚合列表[无计数器]的主要内容,如果未能解决你的问题,请参考以下文章

Python通过多个键单向分组和聚合字典列表

在使用 Python 从字典列表和相应计数中提取键列表时需要帮助

按两个参数对字典列表进行分组并计算分组值

在使用 python 从字典列表中提取值计数时需要帮助

查询用于创建分组、聚合和过滤的行集的不同计数

MongoDB聚合使用表达式运算符(函数)分组按条件计数统计案例一则