给定列表:
links = [ 'link1', 'link2', 'link3', 'link3', 'link4', 'link5', 'link6', 'link6', 'link7', 'link8', 'link9', 'link10']
和这个 dicts 列表:
sources = [{'src': ''}, {'src': ''}, {'src': ''}, {'src': ''}, {'src': ''}, {'src': ''}, {'src': ''}, {'src': ''}, {'src': ''}, {'src': ''}]
我想将每个 src 值设置为其对应的链接,如下所示:
{'src': 'link1'}, {'src': 'link2'}...
我试过:
for s in sources:
for l in links:
s['src'] = l
print (s)
但是这个工作做了 10 次,我只想让它完成一次。
我怎样才能用一行代码实现这一目标?
请您参考如下方法:
我假设 src 指令中还有其他内容,否则 sources 将毫无意义:
for src, link in zip(sources, links):
src['src'] = link
可以把它写成一行:
[s.update({'src': x }) for s, x in zip(sources, links)]
但这将是所谓的“有副作用的理解”,并且被大多数 pythonista 认为是低级趣味。循环更像 pythonic。
以上还假设 len(sources)==len(links) 否则考虑:
for src, link in zip(sources, itertools.cycle(links)):
src['src'] = link
这将以循环方式填充链接。
如果这些 src 字典实际上是空的,则无需保留它们的列表,只需从头开始创建即可:
sources = [{'src': x} for x in links]
