将dict中的2个值与所有其他值进行比较

use*_*074 0 python dictionary

有没有一种简单的方法可以将字典中的2个值与所有其他值进行比较?例如,如果我有一个词典:

dict = {A:12, B:1, C:14, D:13, E:3, F: 4}
Run Code Online (Sandbox Code Playgroud)

我想找到可以加在一起的所有值,以等于另一个值.例如A + B = D,因此将返回A,B和D.

fal*_*tru 7

使用itertools.combinations:

d = {'A':12, 'B':1, 'C':14, 'D':13, 'E':3, 'F': 4}

import itertools
for a, b, c in itertools.combinations(sorted(d, key=d.get), 3):
    if d[a] + d[b] == d[c]:
        print(a,b,c)
Run Code Online (Sandbox Code Playgroud)
B E F
B A D
B D C
Run Code Online (Sandbox Code Playgroud)

UPDATE

如果你想要重复使用itertools.combinations_with_replacement:

d = {'A':1, 'B':2, 'C':4}

import itertools
for a, b, c in itertools.combinations_with_replacement(sorted(d, key=d.get), 3):
    if d[a] + d[b] == d[c]:
        print(a,b,c)
Run Code Online (Sandbox Code Playgroud)
A A B
B B C
Run Code Online (Sandbox Code Playgroud)

为什么sorted用?

比较x + y== z是没有意义的,如果x或是y大于z.(假设所有值都是正整数).我sorted以前安排数据; x <= y <= z.

排序的另一个副作用:如果A + B == C是True,B + A == C也是True.但使用时sorted,只打印一个.


顺便说一句,不要dict用作变量名.它影响内置dict功能.