Использование 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)
B E F
B A D
B D C
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)
A A B
B B C
Почему sorted
используются?
Сравнение x + y
== z
не имеет смысл, если x
или y
это больше, чем z
. (при условии, что все значения являются положительными целыми числами). Я использовал sorted
для упорядочивания данных; x <= y <= z
.
Другой побочный эффект сортировки: если A + B == C
имеет значение True, B + A == C
также является истинным. Но используя sorted
, печатается только один.
BTW, Не используйте dict
как переменное имя. Это тени встроены в функцию dict
.
Если на "легкий путь" вы имеете в виду встроенную функцию, то нет. Вам придется идти «с трудом» сравнения самих дополнений. –
Может ли быть несколько значений по обе стороны от уравнения? (Например, 'A + D + B = C + A' - вы хотите найти такие значения)? –
FYI, это неправильный синтаксис словаря Python - вы хотите использовать кавычки вокруг своих ключей и свои значения, если они являются строками. –