Pythoni c способ создания всех комбинаций от словарного ключа до его значения - PullRequest
2 голосов
/ 11 января 2020

Итак, допустим, у меня есть словарь, подобный этому:

d = {"key1": (1, 2, 3), "key2": ("3", "4", "5")}

Чего я хочу достичь (без вложенных циклов, по-настоящему Pythoni c) - получить все комбинации ключ-значение таким образом:

[("key1", 1), ("key1", 2), ("key1", 3), ("key2", "3"), ("key2", "4"), ("key2", "5")]

Так же, как комбинации значений назначенного ключа, так как значение будет контейнером.

Я попытался просмотреть itertools документы, но я не сделал Кажется, я не нашел ничего, чтобы помочь мне с этим. Есть ли способ сделать это красиво, или я должен использовать циклы?

Ответы [ 2 ]

6 голосов
/ 11 января 2020

Понимание вложенного списка делает свое дело:

d = {"key1": (1, 2, 3), "key2": ("3", "4", "5")}
result = [(k,v) for k,values in d.items() for v in values]
print(result)

Вывод:

[('key1', 1), ('key1', 2), ('key1', 3), ('key2', '3'), ('key2', '4'), ('key2', '5')]
1 голос
/ 11 января 2020

Решение itertools не так хорошо, как метод понимания, но все же возможно.

from itertools import chain, product

list(chain.from_iterable(product([k], v) for k, v in d.items()))

[('key2', '3'),
 ('key2', '4'),
 ('key2', '5'),
 ('key1', 1),
 ('key1', 2),
 ('key1', 3)]
...