减去字典中的所有值是值是浮点数列表

时间:2014-01-24 15:40:40

标签: python list dictionary subtraction

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

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次。

2 个答案:

答案 0 :(得分:4)

使用dict理解

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]}

答案 1 :(得分:0)

如果速度很重要,那么您可以尝试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)