因此,我有这样的字典:
d = {"key1": (1, 2, 3), "key2": ("3", "4", "5")}
我想要实现的(以一种真正的Python方式,没有嵌套循环,是以这种方式获取所有键值组合:
[("key1", 1), ("key1", 2), ("key1", 3), ("key2", "3"), ("key2", "4"), ("key2", "5")]
类似于键的分配值的组合,因为该值将是一个容器。
我曾尝试过itertools
文档,但似乎没有任何东西可以帮助我。有什么办法可以很好地做到这一点,还是我要使用循环?
嵌套列表理解可以解决问题:
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')]
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)]