Python 如何输出字典值的排列

Python 如何输出字典值的排列,python,dictionary,for-loop,permutation,Python,Dictionary,For Loop,Permutation,我有一个有n个键的dict,假设n至少是10。对于每个键n,它的值是一个元素列表,该列表的大小是可变的。我希望能够产生所有的排列。因此,输出将是所有唯一的n长度序列(对于n个键)。我将给出一个简单、人为的例子来说明这一目标。因此,想象这个dict看起来像{'key1':['a','b'],'key2':['1','2'],'key3':['*','!']}。因此,输出将是(保留键的原始顺序-[key1,key2,key3]: ['a', '1', '*'] ['a', '1', '!'] ['a

我有一个有n个键的dict,假设n至少是10。对于每个键n,它的值是一个元素列表,该列表的大小是可变的。我希望能够产生所有的排列。因此,输出将是所有唯一的n长度序列(对于n个键)。我将给出一个简单、人为的例子来说明这一目标。因此,想象这个dict看起来像
{'key1':['a','b'],'key2':['1','2'],'key3':['*','!']}
。因此,输出将是(保留键的原始顺序-[key1,key2,key3]:

['a', '1', '*']
['a', '1', '!']
['a', '2', '*']
['a', '2', '!']
['b', '1', '*']
['b', '1', '!']
['b', '2', '*']
['b', '2', '!']
同样,在我的情况下,键的数量和每个值的长度都会大得多,但这只是为了说明目标。如果您能提供帮助,我们将不胜感激,因为我通常使用for循环,但计算大量可变的for循环是不可行的。谢谢!

尝试以下方法:

import itertools

d = {'key1': ['a', 'b'], 'key2': ['1', '2'], 'key3' :['*', '!']}
iter = itertools.product(*d.values())
这将为您提供一个迭代器。如果要将其展开为列表,请使用:

list(iter)
产生:

[('a', '1', '*'),
 ('a', '1', '!'),
 ('a', '2', '*'),
 ('a', '2', '!'),
 ('b', '1', '*'),
 ('b', '1', '!'),
 ('b', '2', '*'),
 ('b', '2', '!')]

请注意,单个条目是元组,这可能适合您的需要,但如果需要,它们可以很容易地转换为列表。

这是
itertools的典型应用。product
覆盖列表列表列表;将这些选项列表最初存储在dict中对解决方案来说并不重要。请将它们排列在所需的列表中订购、应用
产品
,并将结果反馈给
循环进行处理。谢谢,这正是我要找的!