python - 按前 X 个关键字符求和值 (Python)

标签 python

我有一本像这样的字典(但更长):

codes = {
    '113110': 7,    '113310': 1,    '213111': 1,
    '213112': 3,    '236115': 2,    '236220': 1,
    '238190': 1,    '238330': 1,    '238990': 2,
    '311612': 1,    '321214': 1,     }

我想知道按前两位数字分组的所有键的总和值。因此,'11' 应该是 8。但是如果我像下面这样检查,则 key 中任何位置出现的 '11' 都会被计数。

group_11 = sum([ v for k,v in codes.items() if '11' in k])
# Returns 15 instead of 8

我尝试过使用 startswith,但我不确定它在这种情况下如何工作。不是这样的:

group_11 = sum([ v for k,v in codes.items() if any(k.startswith('11')])

我有 20 个组需要检查,但我希望能够对按前 x 个字符分组的任何键组进行总计,因为分组将来可能会发生变化。

最佳答案

您可以使用itertools.groupby排序(排序对于 groupby 正常工作很重要)并按前两个关键字符对 dict 的项目进行分组,并对每个组的值求和:

from itertools import groupby

d = {
    k: sum(item[1] for item in g) 
    for k, g in groupby(sorted(codes.items()), key=lambda item: item[0][:2])
}

d
{'11': 8, '32': 1, '31': 1, '21': 4, '23': 7}

关于python - 按前 X 个关键字符求和值 (Python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36986549/

相关文章:

python - 以同样的便利替代 PiCloud

python - python 中的动态数组和速度 - 增长数组的最快方法

python - 将嵌套的 dict/json 转换为 django ORM 模型,无需对数据结构进行硬编码

python - 变分自动编码器实现

python - 当索引包含重复数据时添加缺失的 pandas DataFrame 行

python - 如何删除 python 列表中的字符串的一部分?

python - 在切片中,为什么我不能反转列表,跳过单个括号中的最后一项?

python - 从没有值(value)的字典中保存一个键

Python Pandas : Select columns that their content does not contain a value

python - python中tty的非打印输出?