gpt4 book ai didi

python - 在字典列表中使用 'reduce'

转载 作者:太空狗 更新时间:2023-10-29 22:01:51 28 4
gpt4 key购买 nike

我正在尝试编写一个简单的 Python 函数,该函数对具有 likes 键的所有值求和。我正在为这项任务进行函数式编程。因此,我需要使用 list-comprehensionmapfilterreduce。在这种情况下,我认为 reduce 是一个合理的选择。

def sum_favorites(msgs):
num_favorites = reduce(lambda x, y: x["likes"] + y["likes"], msgs)
return num_favorites


content1 = {"likes": 32, ...}
content2 = {"likes": 8, ...}
content3 = {"likes": 16, ...}
contents = [content1, content2, content3]
print(sum_favorites(contents))

问题出现在我实际运行代码时。我似乎收到了以下内容:TypeError: 'int' object is not subscriptable。对我来说,这个错误毫无意义。如果 reduce 确实迭代了给定的参数,那么传递给 lambda 函数的每个项目都应该是一个字典 - 而且每个项目中肯定都有一个 likes 键。问题是什么,这个 Python 错误到底是什么意思?

最佳答案

To me, this error makes no sense. If reduce is truly iterating through the given parameter, then each item passed into the lambda-function should be a dictionary

不,传递给 lambda 的第一个参数(对于除第一个调用之外的所有调用)是上一次调用 lambda 的返回值。您的函数返回一个数字,因此调用它时 x 是一个数字,而不是字典。

有两种方法可以解决这个问题。可能更直接的一个是:

num_favorites = reduce(lambda x, y: x + y['likes'], msgs, 0)

0 是 reduce 的“初始化器”参数,它为 x 提供第一个值。现在在每次调用中,x 是运行总和,y 是下一个字典。

另一种方式,只是为了证明它可以做到,是:

result = reduce(lambda x, y: { 'likes': x['likes'] + y['likes'] }, msgs)
num_favorites = result['likes']

这使得 lambda 的返回值成为带有 likes 键的字典,就像它的参数一样,所以我们在整个过程中使用相同的类型。在这种情况下,这是不必要且浪费的,但如果您聚合多个 key ,这可能是一种有趣的方法。

关于python - 在字典列表中使用 'reduce',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42453091/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com