2017-07-11 22 views
2

Ich habe eine Liste, die Wörterbuch den enthält und ich möchte wie folgt aussieht jeden dritten Eintrag in dieser Liste in eine neue Liste hinzuzufügen: Im Momenteine dict aus einer Liste in einer anderen Liste hinzufügen

result = [{"link": "example.com", "text": "Some description"}, {"link": "example2.com", "text": "lorem ipsum"}] ... 

die Schleife ich habe sieht wie folgt aus:

for i in range(0, len(list), 3): 
    cleanresults.extend(list[i]) 

sondern die gesamte Liste kopiert es fügt nur die Schlüssel

["link", "text", "link", "text"] 

Was habe ich falsch gemacht?

+0

ein Element in der Liste hinzuzufügen, Verwenden 'append()' statt 'erstrecken()' ' –

+0

extend' nimmt ein iterable, welche' list [i] '(a' dict') ist; als iterable, erhalten Sie nur die Schlüssel. – chepner

Antwort

6

Sie wollen hängen, erstreckt sich nicht:

for i in range(0, len(list), 3): 
    cleanresults.append(list[i]) 

Erweiterung fügt der enthaltenen Elemente aus dem Objekt, das Sie übergeben; Wenn Sie über ein Wörterbuch iterieren, erhalten Sie Schlüssel. Diese werden dann zur Liste cleanresults hinzugefügt, nicht das Wörterbuch selbst.

Mehr sauber, man konnte nur eine Kopie der ursprünglichen Liste erstellen jedes dritte Element mit einem slice unter:

cleanresults = list[::3] 

Wenn Sie keine Kopie wollte, aber nur jedes dritte Element zuzugreifen benötigt, während Iterieren, können Sie auch ein itertools.islice() object verwenden:

from itertools import islice 

for every_third in islice(list, 0, None, 3): 
    # do something with every third dictionary. 
4

Sie können dies versuchen:

result = [{"link": "example.com", "text": "Some description"}, {"link": "example2.com", "text": "lorem ipsum"}] ... 

new_result = result[::3] #this list slicing will take every third element in the result list 
Ausgang 0

:

[{'text': 'Some description', 'link': 'example.com'}] 
Verwandte Themen