2016-12-01 4 views
-1

Ich habe gerade angefangen Comprehensions zu lernen und das machte mich ein wenig verwirrt:Comprehensions In Wörterbücher

list1=[2,5,7,8] 
list2=[1,3,5,7] 
list3=[3,5,7,13,17] 

list={key:number for number in list1 if number %2==1 key="odd numbers"} 

Dies erzeugt einen Syntaxfehler.

list={"odd numbers:":number for number in list1 if number %2==1} 

Und das erzeugt ein Paar, das die letzte catchen Nummer Element aus der list1 enthält, die 7. ist (: ungerade Zahlen: Sollte es nicht wie sein 5, ungerade Zahlen: 7?)

+0

'list = { "ungerade Zahlen:": Zahl für Nummer in Liste3, wenn Nummer% 2 == 1} 'wird' {'ungerade Zahlen': 17} ' – RomanPerekhrest

+0

Ich denke, Sie möchten eine Liste aller ungeraden Zahlen aus der Eingabeliste erhalten – RomanPerekhrest

+0

@RomanPerekrest sorry ja, es ist 17 Ich bearbeite es jetzt – Elessar

Antwort

0

In Im ersten Fall haben Sie eine einzige '=', das sollten zwei sein. Im zweiten Fall überschreiben Sie die erste Zuweisung, da sie denselben Schlüssel hat. Ein Schlüssel kann nur eine Zuweisung haben, Sie könnten ihm eine Liste zuweisen, um alle zu erhalten.

+0

Warum sollte das zwei sein? Ich vergleiche nicht zwei verschiedene Dinge, ich gebe der Schlüsselvariablen nur "ungerade Zahlen". – Elessar

0

Jeder Schlüssel in Python dict muss eindeutig sein:

>>> list={("odd numbers:",number) for number in list3 if number %2==1} 
>>> list 
{('odd numbers:', 3), ('odd numbers:', 17), ('odd numbers:', 13), ('odd numbers:', 7), ('odd numbers:', 5)} 

In Ihrem Beispiel Sie jedes Mal Wert mit demselben Schlüssel in dict z außer Kraft setzen .:

>>> odd_dict = {'odd numbers': 1} 
>>> odd_dict 
{'odd numbers': 1} 
>>> odd_dict['odd numbers'] = 2 
>>> odd_dict 
{'odd numbers': 2} 
+0

Könnte ich fragen, warum wir Komma benutzt haben? Gibt es einen bestimmten Grund dafür? – Elessar

+0

Meinst du in diesem Beispiel '(" ungerade Zahlen: ", Nummer)'? –

+0

Ja, ich meinte das. – Elessar

0

Dict Schlüssel müssen eindeutig sein. Sie suchen nach dict literal mit Wert Liste Verständnis, nicht dict Verständnis.

Dict Verständnis:

d1 = {"odd numbers": number for number in list1 if number %2==1} 

Dict wörtliche mit Liste Verständnis als Wert:

d2 = {"odd numbers": [number for number in list1 if number %2==1]} 

Wenn das Verständnis mit dict wird derselbe Schlüssel überschreibt immer und immer wieder mit neuem Wert. Bei der Verwendung von dict literal mit Listenverständnis als Wert ist dem angegebenen Schlüssel eine Liste zugeordnet.

+0

Vielen Dank, aber in der ersten habe ich versucht, key = "ungerade Zahlen" zu tun, um "ungerade Zahlen" zu der Schlüsselvariable zuzuweisen, aber es gibt einen Syntaxfehler.Ist es eine Möglichkeit [eine Zeichenfolge an die Variable]? – Elessar

+0

@Elessar müssen Sie gültiges Python-Literal anzeigen, das Ihrer erwarteten Ausgabe entspricht. Deine Beschreibung ist unklar. –

0

list={"odd numbers:":number for number in list1 if number %2==1} Und dies erzeugt ein Paar, das die letzten catchen Anzahl Artikel aus enthält die list1, die 7. ist (: ungeradee Zahlen: Sollte es nicht wie seine 5, ungerade Zahlen: 7?)

Beachten Sie beim Erstellen eines Diktats, dass dicts nur eindeutige Schlüssel zulassen. Sie erhalten also {'odd numbers': 7}, nachdem Sie die list1 (die letzte ungerade Zahl) entsprechend durchlaufen haben.
Um eine Liste aller ungeraden Zahlen aus der Eingabeliste innerhalb eines dict Verständnis verwenden Sie die folgende Vorgehensweise zu erhalten:

list3=[3,5,7,13,17] 
list = {"odd numbers":[number for number in list3 if number%2 == 1]} 

print(list) 

Der Ausgang:

{'odd numbers': [3, 5, 7, 13, 17]} 
Verwandte Themen