python – 在词典列表中使用’reduce’
我正在尝试编写一个简单的
Python函数,它将具有键的所有值相加.我正在为这项任务进行函数式编程.因此,我需要使用list-comprehension,map,filter或reduce.在这种情况下,我认为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’对象不可订阅.对我来说,这个错误毫无意义.如果reduce真正迭代了给定的参数,那么传递给lambda函数的每个项应该是一个字典 – 并且每个项肯定都有一个类似的键.问题是什么,这个Python错误究竟是什么意思? 解决方法
不,传递给lambda的第一个参数(对于除第一个之外的所有调用)是前一次调用lambda的返回值.您的函数返回一个数字,因此将调用x为数字而不是字典. 有两种方法可以解决这个问题.可能更直接的是: num_favorites = reduce(lambda x,y: x + y['likes'],msgs,0) 0是reduce的“initializer”参数,它提供x的第一个值.现在在每个调用中,x是运行总和,y是下一个字典. 另一种方式,只是为了表明它可以做到,是: result = reduce(lambda x,y: { 'likes': x['likes'] + y['likes'] },msgs) num_favorites = result['likes'] 这使得lambda的返回值成为带有like键的dict,就像它的参数一样,所以我们在整个过程中使用相同的类型.在这种情况下,它是不必要的和浪费的,但如果你聚合了多个密钥,它可能是一个有趣的方法. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |