Python字典汇总值

2024-04-28 05:05:39 发布

您现在位置:Python中文网/ 问答频道 /正文

下面的函数应该返回一个新的字典,它已经汇总了这些值。在

import functools
def sumUp(d):
    for k in d:
        d.update({k: functools.reduce(lambda x, y: x + y, d[k])})
    print(d)

当我按如下方式调用函数时,我得到了以下TypeError,我不明白为什么:

^{pr2}$

Traceback (most recent call last):

File "", line 1, in

File "/home/amir/programming/python/lern.py", line 6, in sumUp print(d)

TypeError: reduce() arg 2 must support iteration

当我省略其中一个关键值时,它可以正常工作:

sumUp({"Ungefucht": (165, 165, 165, 255, 286.25, 255, 165, 240, 240, 150), "Malsch": (120, 240, 120, 120, 120, 120, 120), "AAA": (1, 2), "Fens": (115.20, 69.60, 28.80, 50.40)})

{'Malsch': 960, 'Ungefucht': 2086.25, 'Fens': 264.0, 'AAA': 3}

为什么第一个多了一个项目的示例没有按预期工作?在


Tags: 函数inreduce字典linefile汇总print
1条回答
网友
1楼 · 发布于 2024-04-28 05:05:39

这是有效的:

def sumUp(d):
    new_d = {k: sum(v) for k, v in d.items()}
    print(new_d)
    return new_d

请记住,在迭代字典的同时更新字典,这会导致各种奇怪的行为。在

这种行为是非常随机的,并且依赖于键散列的salt(它修改dict的顺序)。在python3中不能一致地复制它。在

这是您修复的代码:

^{pr2}$

它设置密钥而不是更新dict,这是安全的。在

相关问题 更多 >