Sal*_*ali 11 python reduce dictionary
我有一些问题,了解如何在python中使用reduce与词典.例如,我有以下字典.
{1: 3, 2: 1, 3: 2}
我正在尝试计算以下内容:
s = 0
for i in h:
s += h[i] * (h[i] - 1)
Run Code Online (Sandbox Code Playgroud)
这按预期工作(我得到:) 8,但我试图将其转换为减少范式失败:
reduce(lambda x, y: x + y * (y - 1), h)但是我得到了错误的答案.
我认为这是因为我使用的是键,而不是值.如何将我的代码转换为正确缩减?
Abh*_*jit 27
您需要迭代字典,同时使用初始值零来减少字典.
注意,迭代字典,实际上遍历键,因此您需要索引字典以获取值
reduce(lambda x, key:x + h[key] * (h[key] - 1), h, 0)
Run Code Online (Sandbox Code Playgroud)
或者,因为您只对字典的值感兴趣,至少关心密钥,只需迭代字典的值
reduce(lambda x, value:x + value * (value - 1), h.itervalues(), 0)
Run Code Online (Sandbox Code Playgroud)
reduce(lambda x, value:x + value * (value - 1), h.values(), 0)
Run Code Online (Sandbox Code Playgroud)