<p>首先将输入列表中的所有内容连接到<em>one</em>字典中;这样您就可以使用<code>zip()</code>将所有值转换为行,并将其与键重新组合:</p>
<pre><code>try:
# use efficient Python 3 version in Python 2
from future_builtins import zip
except ImportError:
# Python 3
pass
combined = reduce(lambda d1, d2: dict(d1, **d2), inputlist)
result = [dict(zip(combined, col)) for col in zip(*combined.values())]
</code></pre>
<p><a href="https://docs.python.org/3/library/functions.html#zip" rel="nofollow">^{<cd1>} function</a>将输入列表中的元素配对在一起,生成一个元组,其中包含所有第一个元素,然后是所有第二个元素,依此类推。<code>zip(*list_of_lists)</code>调用中的<code>*</code>将包含的所有序列(这里是来自组合字典值的所有列表)作为单独的参数,然后<code>zip()</code>继续配对。本质上,这会将行转换为列序列。你知道吗</p>
<p>然后将这些列序列与键重新组合(再次使用<code>zip()</code>进行配对)以形成输出字典。你知道吗</p>
<p>演示:</p>
<pre><code>>>> inputlist = [
... {'paramA': ['valA1','valA2','valA3','valA4']},
... {'paramB': ['valB1','valB2','valB3','valB4']},
... {'paramC': ['valC1','valC2','valC3','valC4']},
... # ...........................................,
... {'paramN': ['valN1', 'valN2','valN3','valN4']}]
>>> combined = reduce(lambda d1, d2: dict(d1, **d2), inputlist)
>>> [dict(zip(combined, col)) for col in zip(*combined.values())]
[{'paramN': 'valN1', 'paramC': 'valC1', 'paramB': 'valB1', 'paramA': 'valA1'}, {'paramN': 'valN2', 'paramC': 'valC2', 'paramB': 'valB2', 'paramA': 'valA2'}, {'paramN': 'valN3', 'paramC': 'valC3', 'paramB': 'valB3', 'paramA': 'valA3'}, {'paramN': 'valN4', 'paramC': 'valC4', 'paramB': 'valB4', 'paramA': 'valA4'}]
>>> from pprint import pprint
>>> pprint(_)
[{'paramA': 'valA1', 'paramB': 'valB1', 'paramC': 'valC1', 'paramN': 'valN1'},
{'paramA': 'valA2', 'paramB': 'valB2', 'paramC': 'valC2', 'paramN': 'valN2'},
{'paramA': 'valA3', 'paramB': 'valB3', 'paramC': 'valC3', 'paramN': 'valN3'},
{'paramA': 'valA4', 'paramB': 'valB4', 'paramC': 'valC4', 'paramN': 'valN4'}]
</code></pre>