Рассмотрим вложенный словарь:
d1 = {'key': {'r1': [1,2,3],
'r2': [5,6]} }
Я хочу извлечь список словарей из вышеприведенного изречения, который принимает все комбинации элементов списка вложенного словаря.Например, для вышеуказанного dict я бы хотел:
ans = [ {'root': 'key', 'r1': 1, 'r2':5},
{'root': 'key', 'r1': 1, 'r2':6},
{'root': 'key', 'r1': 2, 'r2':5},
{'root': 'key', 'r1': 2, 'r2':6},
{'root': 'key', 'r1': 3, 'r2':5},
{'root': 'key', 'r1': 3, 'r2':6}
]
Я могу сделать это вручную для вышеприведенного примера, но проблема в том, что количество ключей, кроме «root» в d1, может быть любымномер переменной и мой ответ изменится, например, рассмотрим:,
d2 = {'key': {'r1': [1,2,3],
'r2': [5,6],
'r3': [7,8]}
}
Теперь ответ будет выглядеть следующим образом:
ans = [ {'root': 'key', 'r1': 1, 'r2':5, 'r3':7},
{'root': 'key', 'r1': 1, 'r2':6, 'r3':8},
{'root': 'key', 'r1': 2, 'r2':5, 'r3':7},
{'root': 'key', 'r1': 2, 'r2':6 ,'r3':8},
.
.(total 12 combinations)
]
Я могу использовать itertools.product, чтобы найти комбинацииэлементы в переменном количестве списков следующие:
from itertools import product
list(product(d1['key']['r1'], d1['key']['r2']))
возвращает:
[(1, 5), (1, 6), (2, 5), (2, 6), (3, 5), (3, 6)]
Но как я могу добавить соответствующие ключи к каждому из этих элементов и как я могу сделать это динамически?