<p>迭代器在这里非常有用:您可以使用<a href="https://docs.python.org/3/library/itertools.html#itertools.cycle" rel="nofollow noreferrer">^{<cd1>}</a>获得一个迭代器,该迭代器在<code>list_1</code>、<code>list_2</code>和<code>list_3</code>上无限循环。然后简单地迭代<code>list_dicts_1</code>和<code>list_dicts_2</code>中的dict并将它们附加到从<code>cycle</code>获得的列表中:</p>
<pre><code>import itertools
list_1, list_2, list_3 = lists = [], [], []
# make an iterator that endlessly loops over list_1, list_2 and list_3
itr = itertools.cycle(lists)
# loop over the dicts
for dic in itertools.chain(list_dicts_1, list_dicts_2):
# and append the dict to the next list
next(itr).append(dic)
</code></pre>
<p>我使用<a href="https://docs.python.org/3/library/itertools.html#itertools.chain" rel="nofollow noreferrer">^{<cd8>}</a>将<code>list_dicts_1</code>和<code>list_dicts_2</code>组合成一个iterable,并使用<a href="https://docs.python.org/3/library/functions.html#next" rel="nofollow noreferrer">^{<cd11>}</a>函数手动推进<code>cycle</code>迭代器。你知道吗</p>
<p>结果:</p>
<pre><code>>>> list_1
[{'name': 'Suarez', 'footed': 'right-footed', 'color': 'black'},
{'name': 'Suarez4', 'footed': 'right-footed4', 'color': 'black4'},
{'name': 'Coutinho', 'footed': 'left-footed', 'color': 'orange'},
{'name': 'Coutinho4', 'footed': 'left-footed4', 'color': 'orange4'}]
>>> list_2
[{'name': 'Suarez2', 'footed': 'right-footed2', 'color': 'black2'},
{'name': 'Suarez5', 'footed': 'right-footed5', 'color': 'black5'},
{'name': 'Coutinho2', 'footed': 'left-footed1', 'color': 'orange2'},
{'name': 'Coutinho5', 'footed': 'left-footed5', 'color': 'orange5'}]
>>> list_3
[{'name': 'Suarez3', 'footed': 'right-footed3', 'color': 'black3'},
{'name': 'Suarez6', 'footed': 'right-footed6', 'color': 'black6'},
{'name': 'Coutinho3', 'footed': 'left-footed2', 'color': 'orange3'},
{'name': 'Coutinho6', 'footed': 'left-footed6', 'color': 'orange6'}]
</code></pre>
<hr/>
<p>另一种选择是将两个输入列表串联成一个巨大的列表,然后对其进行切片:</p>
<pre><code>list_ = list_dicts_1 + list_dicts_2
list_1 = list_[::3]
list_2 = list_[1::3]
list_3 = list_[2::3]
</code></pre>
<p>但是,串联列表的成本有点高,因此如果列表非常大,应该避免这种情况。你知道吗</p>