我如何找到字典中数值之间的所有差异?

3

假如我有一个字典:

dictionary = {'A':3,'B',8,'C',12}

如何循环遍历字典,并计算每个值之间的差异并保存结果。

例如,我想要(不使用硬编码)返回一个类似于上面字典的字典:

differences = {'A_minus_B':-5,'B_minus_A':5,
               'A_minus_C':-8,'C_minus_A':8,
               'C_minus_B':4,'B_minus_C':-4}

我可以硬编码,但我希望我的函数更加动态化,这样我就可以添加更多的元素,而不必写冗长的代码来整合新的元素。
3个回答

3
一个可行但丑陋的循环解决方案:
differences = dict()
for k1,v1 in dictionary.items():
    for k2,v2 in dictionary.items():
        if k1==k2: continue
        differences[k1 + '_minus_' + k2] = v1-v2

3
你可以使用itertools.permutations来生成不同字典项的配对,然后使用字典推导式构建差异字典。
from itertools import permutations

diff = {f'{ak} - {bk}': av - bv
        for (ak, av), (bk, bv) in permutations(dictionary.items(), 2)}

print(diff)

输出

{'A - B': -5, 'A - C': -9, 'B - A': 5, 'B - C': -4, 'C - A': 9, 'C - B': 4}

1

那么使用一些字典推导怎么样?不需要导入,而且相对来说比较易读。

{f'{k1}_minus_{k2}': d[k1] - d[k2] for k1 in d for k2 in d if k1 != k2}

如果你不是在3.6版本中,可以使用其他形式的连接来替换f-string。

输出

{'A_minus_B': -5,
 'A_minus_C': -9,
 'B_minus_A': 5,
 'B_minus_C': -4,
 'C_minus_A': 9,
 'C_minus_B': 4}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接