简体   繁体   English

Python-将列表中的项目设置为字典值列表

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM