2017-06-26 5 views
2

Ich habe eine 4 Zeilen in der Eingabe, die wie folgt aussieht:Wie ein Wörterbuch von Eingabezeichenfolge in Python3 erstellen

first 10 
second 20 
third 30 
fourth 40 

Und ich möge erstellen dict mit Worten als Schlüssel und Zahl als Wert:

{ 
    'first': 10, 
    'second': 20, 
    'third': 30' 
    'fourth': 40 
} 

Wie wird dies durch das dict-Verständnis erreicht? So wird diese Arbeit:

d = {} 
for i in range(4): 
    s = input().split() 
    d[s[0]] = s[1] 

Und das ist nicht:

x = {s: v for k in range(4) for s, v in input().split()} 

Antwort

2

Obwohl Jean hat bereits eine Antwort gegeben, dachte ich, das auch hinzufügen würde, welcher Generator verwendet den Eingang zu erhalten und aufgespalten und dann DIKT Verständnis das Wörterbuch zu bilden.

{ k : v for k, v in (input().split() for _ in range(4)) } 
+0

und ich kann einfach int (v) in ihm: '{k: int (v) für k, v in (. Eingang() split() für _ in Bereich (4))}' Es ist genial. Vielen Dank! –

+0

ist es in der Tat sehr gut. –

0

Sie einfach auf Leerzeichen aufzuteilen und das wird Sie nicht die gewünschten Paare geben. Es würde Ihnen eine Liste der Wörter geben, die durch whitespace getrennt werden (wie ['first', '10', second', '20']). Versuchen Sie so etwas wie:

x = {item.split()[0]: item.split()[1] for item in input().split('\n')}

1

Sie auf den Wert des split Ergebnis in der inneren Schleife iteriert, wo Sie müssen nur zuweisen & die geteilten Werte zu entpacken. Leider können Sie das nicht innerhalb eines Listenverständnisses tun. obwohl

Aber man könnte ein Generator Verständnis Nachgeben Paare statt ein Wörterbuch Verständnis

x = dict(input().split() for k in range(4)) 

übergeben, die einfach ist, aber Strings auf ganze Zahlen nicht, konvertieren. Um das zweite Element in Ganzzahlen zu konvertieren, während es im Listenverständnis bleibt, könnten Sie enumerate für das Split-Ergebnis verwenden und testen, ob dies das zweite Element ist, das einen ternären Ausdruck verwendet, der die Zeile komplexiert, aber den Wert als Ganzzahl ergibt.

x = dict([int(x) if i==1 else x for i,x in enumerate(input().split())] for k in range(4)) 
Verwandte Themen