2013-01-03 18 views
5

Wydaje się prosty, ale nieuchwytny, chcesz zbudować dyktat z wejścia [klucza, wartości] par rozdzielonych spacją za pomocą tylko jednej instrukcji Pythona. To, co mam tak daleko:Stwórz słownik w Pythonie z wartości wejściowych

d={} 
n = 3 
d = [ map(str,raw_input().split()) for x in range(n)] 
print d 

Wejście:

A1023 CRT 
A1029 Regulator 
A1030 Therm 

Pożądany wyjściowa:

{'A1023': 'CRT', 'A1029': 'Regulator', 'A1030': 'Therm'} 

Odpowiedz

3

użyciu str.splitines() i str.split():

In [126]: strs="""A1023 CRT 
    .....: A1029 Regulator 
    .....: A1030 Therm""" 

In [127]: dict(x.split() for x in strs.splitlines()) 
Out[127]: {'A1023': 'CRT', 'A1029': 'Regulator', 'A1030': 'Therm'} 

str.splitlines([keepends]) -> list of strings

Return a list of the lines in S, breaking at line boundaries. Line breaks are not included in the resulting list unless keepends is given and true.

str.split([sep [,maxsplit]]) -> list of strings

Return a list of the words in the string S, using sep as the delimiter string. If maxsplit is given, at most maxsplit splits are done. If sep is not specified or is None, any whitespace string is a separator and empty strings are removed from the result.

+1

argv! Pobiłeś mnie do tego dokładnie przez jedną sekundę. Usuwanie kopalni – inspectorG4dget

1

Zakładając, że tekst w zmiennej s:

dict(map(lambda l: l.split(), s.splitlines())) 
4

To właśnie skończył przy użyciu:

n = 3 
d = dict(raw_input().split() for _ in range(n)) 
print d 

Wejście:

A1023 CRT 
A1029 Regulator 
A1030 Therm 

wyjściowa:

{'A1023': 'CRT', 'A1029': 'Regulator', 'A1030': 'Therm'} 
+0

Dlaczego tylko _ działa w powyższej pętli for? –

+0

Zmienna nazwa _ jest tradycyjnym idiomem "Nie obchodzi". W związku z tym każda nazwa zmiennej byłaby wystarczająca, nawet jeśli jej wartość nigdy nie jest używana. –

0
for i in range(n): 
    data = input().split(' ') 
    d[data[0]] = data[1] 
for keys,values in d.items(): 
    print(keys) 
    print(values) 
1
n = int(input())   #n is the number of items you want to enter 
d ={}      
for i in range(n):   
    text = input().split()  #split the input text based on space & store in the list 'text' 
    d[text[0]] = text[1]  #assign the 1st item to key and 2nd item to value of the dictionary 
print(d) 

INPUT:

3 

A1023 CRT 

A1029 Regulator 

A1030 Therm 

UWAGA: dodałem dodatkową linię dla każdego wejścia do coraz każde wejście na poszczególnych liniach na tej stronie. Ponieważ umieszczenie bez dodatkowej linii tworzy pojedynczą linię.

WYJŚCIE:

{'A1023': 'CRT', 'A1029': 'Regulator', 'A1030': 'Therm'} 
+0

Powoduje to błąd: SyntaxError: nieoczekiwany EOF podczas analizowania po wprowadzeniu A1023 CRT. –

0
n=int(input()) 
pair = dict() 

for i in range(0,n): 
     word = input().split() 
     key = word[0] 
     value = word[1] 
     pair[key]=value 

print(pair) 
+0

O ile ten fragment kodu może być rozwiązaniem, [w tym wyjaśnienie] (https://meta.stackexchange.com/questions/114762/explaining-entirely- code-based-answers) naprawdę pomaga poprawić jakość twojego stanowisko. Pamiętaj, że odpowiadasz na pytanie przeznaczone dla czytelników w przyszłości, a te osoby mogą nie znać powodów sugestii dotyczących kodu. –

+0

Tnq za dobrą sugestię. – rashedcs

Powiązane problemy