【问题标题】:How to sum values in dictionary with multiple elements in string?如何将字典中的值与字符串中的多个元素相加?
【发布时间】:2019-07-20 20:53:33
【问题描述】:

我正在尝试对字典中的值求和,该字典包含键的字符串,并将列表作为值。

标准的sum(d.values()) 不起作用。

d= {'a': [6,7,8], 'b':[30,-3, 5000,] 'c':[200.6], 'd':[2,2,2,2,2,2,2]}

当我使用sum(d.values()) 时,我得到:

TypeError: unsupported operand type(s) for +: 'int' and 'list'

【问题讨论】:

  • 您是要对每个键的列表求和,还是要对字典求和?
  • 只是字典的总数,而不是每个键的总数。

标签: python python-3.x jupyter-notebook


【解决方案1】:

您可以像这样在dicts's values 上使用summap

>>> sum(map(sum, d.values()))
5262.6

【讨论】:

    【解决方案2】:

    最好的方法是创建一个生成器,它获取每个数组的总和,并最终找到生成器中值的总和。

    或者如果您只是想查看代码。

    sum(sum(a) for a in d.values())

    【讨论】:

      【解决方案3】:

      你可以解压d.values()返回的列表列表,就像this question一样。

      sum(y for x in d.values() for y in x)
      

      【讨论】:

        【解决方案4】:

        一个带有itertools.chain的版本:

        from itertools import chain
        
        d= {'a': [6,7,8], 'b':[30,-3, 5000], 'c':[200.6], 'd':[2,2,2,2,2,2,2]}
        
        print(sum(chain(*d.values())))
        

        打印:

        5262.6
        

        【讨论】:

          【解决方案5】:

          您可以对每个子列表的sum() 进行sum()

          sum(sum(x) for x in d.values())
          

          或者如果您不介意导入库:

          import itertools as it
          sum(it.chain(*d.values()))
          

          【讨论】:

            【解决方案6】:

            已经有好的解决方案,但这是另一种方式

            sum(sum(a) for a in d.values())
            

            【讨论】:

            • sum(sum(a) for a in d.values()) 我非常喜欢我改变了答案。感谢触发记忆。
            【解决方案7】:

            最短路径之一:-

            sum( sum(d.values(), [] ) )
            

            输出

            5262.6
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-05-13
              • 1970-01-01
              • 1970-01-01
              • 2023-03-19
              相关资源
              最近更新 更多