[英]Python - set items on a list to a list of dictionary values
Given the list
: 给定
list
:
links = [ 'link1', 'link2', 'link3', 'link3', 'link4', 'link5', 'link6', 'link6', 'link7', 'link8', 'link9', 'link10']
and this list of dicts
: 这是
dicts
列表:
sources = [{'src': ''}, {'src': ''}, {'src': ''}, {'src': ''}, {'src': ''}, {'src': ''}, {'src': ''}, {'src': ''}, {'src': ''}, {'src': ''}]
I would like to set each src
value to its correspondant link, like so: 我想将每个
src
值设置为其对应的链接,如下所示:
{'src': 'link1'}, {'src': 'link2'}
... {'src': 'link1'}, {'src': 'link2'}
...
I have tried: 我努力了:
for s in sources:
for l in links:
s['src'] = l
print (s)
but this does the job 10 times, and I'd like to have it done only once. 但这可以完成10次,而我只想做一次。
How can I achieve this with a one-liner? 如何通过单线实现?
I assume there's something else in src
dicts, otherwise sources
would make little sense: 我认为
src
字典中还有其他内容,否则sources
将毫无意义:
for src, link in zip(sources, links):
src['src'] = link
It is possible to write that as one-liner: 可以将其写为单行:
[s.update({'src': x }) for s, x in zip(sources, links)]
but this would be a so-called "comprehension with side effects" and considered bad taste by most pythonistas. 但这将是所谓的“对副作用的理解”,并且被大多数pythonista使用者认为是不良口味。 A loop is far more pythonic.
循环远不止于pythonic。
The above also assumes that len(sources)==len(links)
otherwise consider: 上面还假设
len(sources)==len(links)
否则考虑:
for src, link in zip(sources, itertools.cycle(links)):
src['src'] = link
which will populate links in a round-robin fashion. 它将以循环方式填充链接。
If these src
dicts are actually empty, there's no need to keep a list of them, just create it from the scratch: 如果这些
src
字典实际上是空的,则无需保留它们的列表,只需从头开始创建即可:
sources = [{'src': x} for x in links]
I would not rcecommend a one-liner here. 我不会在这里推荐一线。 Just a simple for-loop is best:
最好是一个简单的for循环:
>>> for d,link in zip(sources, links):
... d['src'] = link
>>> print(sources)
[{'src': 'link1'}, {'src': 'link2'}, {'src': 'link3'}, {'src': 'link3'}, {'src': 'link4'}, {'src': 'link5'}, {'src': 'link6'}, {'src': 'link6'}, {'src': 'link7'}, {'src': 'link8'}]
links = [ 'link1', 'link2', 'link3', 'link3', 'link4', 'link5', 'link6', 'link6', 'link7', 'link8', 'link9', 'link10']
sources = [dict(src = ln) for ln in links]
print sources
[{'src': 'link1'}, {'src': 'link2'}, {'src': 'link3'}, {'src': 'link3'}, {'src': 'link4'}, {'src': 'link5'}, {'src': 'link6'}, {'src': 'link6'}, {'src': 'link7'}, {'src': 'link8'}, {'src': 'link9'}, {'src': 'link10'}]
print map(lambda v: dict(src = v), links)
or 要么
# for python 3
print (list(map(lambda v: dict(src = v), links)))
[{'src': 'link1'}, {'src': 'link2'}, {'src': 'link3'}, {'src': 'link3'}, {'src': 'link4'}, {'src': 'link5'}, {'src': 'link6'}, {'src': 'link6'}, {'src': 'link7'}, {'src': 'link8'}, {'src': 'link9'}, {'src': 'link10'}]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.