2017-01-26 7 views
1

Angesichts der list:Python - Items auf einer Liste, um eine Liste der Wörterbuchwerte

links = [ 'link1', 'link2', 'link3', 'link3', 'link4', 'link5', 'link6', 'link6', 'link7', 'link8', 'link9', 'link10'] 

und diese Liste der dicts:

sources = [{'src': ''}, {'src': ''}, {'src': ''}, {'src': ''}, {'src': ''}, {'src': ''}, {'src': ''}, {'src': ''}, {'src': ''}, {'src': ''}] 

Ich möchte jeden src Wert auf seine correspondant Link, etwa so:

{'src': 'link1'}, {'src': 'link2'} ...

Ich habe versucht:

for s in sources: 
    for l in links: 
     s['src'] = l 
     print (s) 

aber das macht den Job 10-mal, und ich möchte es nur einmal durchgeführt haben.

Wie erreiche ich das mit einem Einzeiler?

Antwort

4

Ich nehme an, es ist etwas anderes in src dicts, sonst sources würde wenig Sinn machen:

for src, link in zip(sources, links): 
    src['src'] = link 

Es ist möglich, zu schreiben, dass als Einzeiler:

[s.update({'src': x }) for s, x in zip(sources, links)] 

aber dies würde eine sein sogenanntes "Verständnis mit Nebenwirkungen" und von den meisten Pythonisten als schlechter Geschmack angesehen. Eine Schleife ist viel mehr Python.

Die oben geht auch davon aus, dass len(sources)==len(links) anders betrachten:

for src, link in zip(sources, itertools.cycle(links)): 
    src['src'] = link 

die Links in einem Round-Robin-bevölkern werden.

Wenn diese src dicts tatsächlich leer sind, gibt es keine Notwendigkeit, eine Liste von ihnen zu halten, schaffen es nur aus dem Grund:

sources = [{'src': x} for x in links] 
2

ich keine Einzeiler hier würde rcecommend. Nur eine einfache for-Schleife ist am besten:

>>> 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'}] 
2
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) 

oder

# 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'}] 
Verwandte Themen