下面的函数应该返回一个新的字典,它已经汇总了这些值。在
import functools
def sumUp(d):
for k in d:
d.update({k: functools.reduce(lambda x, y: x + y, d[k])})
print(d)
当我按如下方式调用函数时,我得到了以下TypeError
,我不明白为什么:
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}
为什么第一个多了一个项目的示例没有按预期工作?在
这是有效的:
请记住,在迭代字典的同时更新字典,这会导致各种奇怪的行为。在
这种行为是非常随机的,并且依赖于键散列的salt(它修改dict的顺序)。在python3中不能一致地复制它。在
这是您修复的代码:
^{pr2}$它设置密钥而不是更新dict,这是安全的。在
相关问题 更多 >
编程相关推荐