【问题标题】:subtracting all values in dictionaries were values are list of floats减去字典中的所有值是浮点数列表
【发布时间】:2014-01-24 15:40:40
【问题描述】:

我有两个字典,每个值都是浮点数列表

d1 = {'a': [10,11,12], 'b': [9,10,11], 'c': [8,9,10], 'd': [7,8,9]}

d2 = {'a': [1,1,1], 'b': [2,3,2], 'c': [1,2,2], 'd': [4,3,4]}

我想减去字典 d1-d2 之间的值并得到结果:

d3 = {'a': [9,10,11], 'b': [7,7,9], 'c': [7,7,9], 'd': [3,5,5] }

我在这个网站上找到了有关如何减去每个键只有一个浮点值的字典的条目,以及如何在每个字典中减去列表,但不是在字典之间。

此外,还需要考虑速度,因为我每次都要使用不同的字典运行大约 200,000 次。

【问题讨论】:

    标签: python list dictionary subtraction


    【解决方案1】:

    使用字典推导

    zip:

    >>> {k:[x-y for x, y in zip(d1[k], d2[k])] for k in d1}
    {'a': [9, 10, 11], 'c': [7, 7, 8], 'b': [7, 7, 9], 'd': [3, 5, 5]}
    

    map:

    >>> from operator import sub
    >>> {k:map(sub, d1[k], d2[k]) for k in d1}
    {'a': [9, 10, 11], 'c': [7, 7, 8], 'b': [7, 7, 9], 'd': [3, 5, 5]}
    

    【讨论】:

      【解决方案2】:

      如果速度很重要,那么你可以试试numpy

      import numpy as np
      
      def sub(x, y):
          # probably it would be better if x and y already had numpy arrays as the values.
          return {key: np.array(x[key]) - np.array(y[key]) for key in x}
      
      print sub(d1, d2)
      

      【讨论】:

      • 我不确定这是否更快,因为您每次都将list 转换为np.array
      猜你喜欢
      • 2022-01-10
      • 2016-01-21
      • 1970-01-01
      • 1970-01-01
      • 2015-03-11
      • 2021-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多