回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我有一个任意的python字典<code>x</code>,这样每个键的值本身就是一个列表。举个例子:</p>
<pre><code>x = {"first_name": ["Habib", "Wen-lao"], "second_name": ["Khan", "Chen"]}
</code></pre>
<p>给定<code>x</code>,我想编写一个计算字典列表的方法,这样每个字典都有与x相同的键,但值是单个列表元素的每个组合。你知道吗</p>
<p><strong>此外,我希望看到所有完全省略键的组合。你知道吗</p>
<p>所以在这种情况下,结果应该是:</p>
<pre><code>[{"first_name": "Habib", "second_name": "Khan"},
{"first_name": "Habib", "second_name": "Chen"},
{"first_name": "Habib"},
{"first_name": "Wen-lao", "second_name": "Khan"},
{"first_name": "Wen-lao", "second_name": "Chen"}
{"first_name": "Wen-lao"},
{"second_name": "Khan"},
{"second_name": "Chen"},
{}]
</code></pre>
<p>我该怎么做?字典<code>x</code>可以有任意数量的键和任意名称。结果列表的顺序与我无关。你知道吗</p>
<p>目前我有:</p>
<pre><code>>>> from collections import OrderedDict
>>> from itertools import product
>>>
>>> def looper(in_dict):
>>> order_of_keys = in_dict.keys()
>>> list_of_tuples = [(key, in_dict[key]) for key in order_of_keys]
>>> ordered_dict = OrderedDict(list_of_tuples)
>>> return [dict(zip(ordered_dict.keys(), t)) for t in product(*ordered_dict.values())]
>>>
>>> x = {"first_name": ["Habib", "Wen-lao"], "second_name": ["Khan", "Chen"]}
>>> print looper(in_dict=x)
[{'first_name': 'Habib', 'second_name': 'Khan'},
{'first_name': 'Habib', 'second_name': 'Chen'},
{'first_name': 'Wen-lao', 'second_name': 'Khan'},
{'first_name': 'Wen-lao', 'second_name': 'Chen'}]
</code></pre>
<p>但它没有显示省略了键的组合。
我该怎么做?你知道吗</p>
<p>编辑:</em></strong>
这个<a href="https://stackoverflow.com/questions/47175020/how-can-i-write-a-python-method-to-compute-all-combinations-of-a-dict-of-lists">question</a>是相关的,但本质上是不同的。在那里,我想知道如何创建所有列表的简单组合。在这里我想知道如何也包括组合键省略。你知道吗</p>