Как перебрать словарь определенным образом? - PullRequest
1 голос
/ 15 мая 2019

Я пытаюсь перебрать словарь определенным образом. Допустим, мой словарь выглядит так:

d={'MERRY': [12996, 13225, 18225, 20449, 24336, 27556, 27889, 34225, 46225,
             52441, 61009, 62001, 63001, 64009, 70225, 73441, 81225],
   'XMAS': [1024, 1089, 1296, 1369, 1764, 1849, 1936, 2304, 2401, 2601, 2704,
            2809, 2916, 3025, 3249, 3481,3721, 4096, 4356, 4761, 5041, 5184,
            5329, 5476, 6084, 6241, 6724, 7056, 7396, 7569, 7921, 8649, 9025,
            9216, 9604, 9801],
   'TO': [16, 25, 36, 49, 64, 81],
   'ALL': [100, 144, 400, 900]}

Сначала я хочу проверить комбинации:

12996 1024 16 100,
12996 1024 16 144,
12996 1024 16 400,
12996 1024 16 900,

После этого: 12966 1024 25 100 и т. Д.

Мне нужно проверить все возможные комбинации. Другое решение мне тоже подходит.

Я пытался сделать это вручную с большим количеством циклов for, и это работает.

Код работал для этого примера, но мне нужно расширить его до словаря, содержащего до 10 ключей. Я понятия не имею, как это исправить.

Этот код показывает пример словаря с 4 клавишами:

for item in d['MERRY']:
    for item2 in d['XMAS']:
        for item3 in d['TO']:
            for item4 in d['ALL']:
                #make something out of items1,2,3 and 4
                if something == somethingelse:
                    #print(something)

1 Ответ

1 голос
/ 16 мая 2019

Попробуйте (комплименты @Prune):

from itertools import product
[p for p in product(*d.values())]

product() дает вам итерацию. Если вы не хотите, чтобы итерация сразу же попала в список, пропустите понимание списка.

...