【问题标题】:reduce array of dictionaries [duplicate]减少字典数组[重复]
【发布时间】:2017-06-21 21:22:39
【问题描述】:

我有一系列要减少的字典

foo = [{'value': 45}, {'value': 2}, {'value': 3}, {'value': 0}]
reduce(lambda x, y: x['value']+y['value'] , foo)

给我以下错误

TypeError: 'int' object has no attribute '__getitem__'

我最终做的是首先使用推导式创建一个简单的数组。

reduce(lambda x, y: x+y, [x['value'] for x in foo])

【问题讨论】:

  • 问题是什么?
  • 请发布您想要的输出。
  • 由于某些原因,当字典数量超过 2 时,reduce() 不起作用。我还不知道为什么。

标签: python reduce


【解决方案1】:

reduce(function, [a, b, c]) 等价于function(function(a, b), c)。 因此function 的结果必须适合作为function 的第一个参数。

为了说明,这是有效的:

>>> reduce(lambda x, y: {'value': x['value']+y['value']} , foo)
{'value': 50}

【讨论】:

    【解决方案2】:

    您使用reduce 错误。

    from functools import reduce
    
    foo = [{'value': 45}, {'value': 2}, {'value': 3}, {'value': 0}]
    reduce(lambda acc, item: acc + item['value'], foo, 0)
    

    曾经根据累加器减少列表项,而不是彼此之间的列表项。

    【讨论】:

      【解决方案3】:

      如果你想对整数值求和

      您可以使用运算符库中的内置函数来减少:

      from functools import reduce
      from operator import add, itemgetter
      
      reduce(add, map(itemgetter('value'), foo))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-02-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-03
        • 2012-02-25
        • 2021-03-03
        • 1970-01-01
        相关资源
        最近更新 更多