<p>以下是使用<code>itertools.product</code>和递归的简明方法:</p>
<pre><code>from itertools import product
def traverse(d):
K,V = zip(*d.items())
for v in product(*(v if isinstance(v,list) else traverse(v) for v in V)):
yield dict(zip(K,v))
</code></pre>
<p>运行示例:</p>
<pre><code>>>> d = {
>>> "key0": {
>>> "key1": [1, 2],
>>> "key2": [8, 9, 10]
>>> },
>>> "key3": [22, 23, 24]
>>> }
>>> from pprint import pprint
>>> pprint([*traverse(d)])
[{'key0': {'key1': 1, 'key2': 8}, 'key3': 22},
{'key0': {'key1': 1, 'key2': 8}, 'key3': 23},
{'key0': {'key1': 1, 'key2': 8}, 'key3': 24},
{'key0': {'key1': 1, 'key2': 9}, 'key3': 22},
{'key0': {'key1': 1, 'key2': 9}, 'key3': 23},
{'key0': {'key1': 1, 'key2': 9}, 'key3': 24},
{'key0': {'key1': 1, 'key2': 10}, 'key3': 22},
{'key0': {'key1': 1, 'key2': 10}, 'key3': 23},
{'key0': {'key1': 1, 'key2': 10}, 'key3': 24},
{'key0': {'key1': 2, 'key2': 8}, 'key3': 22},
{'key0': {'key1': 2, 'key2': 8}, 'key3': 23},
{'key0': {'key1': 2, 'key2': 8}, 'key3': 24},
{'key0': {'key1': 2, 'key2': 9}, 'key3': 22},
{'key0': {'key1': 2, 'key2': 9}, 'key3': 23},
{'key0': {'key1': 2, 'key2': 9}, 'key3': 24},
{'key0': {'key1': 2, 'key2': 10}, 'key3': 22},
{'key0': {'key1': 2, 'key2': 10}, 'key3': 23},
{'key0': {'key1': 2, 'key2': 10}, 'key3': 24}]
</code></pre>