2017-02-04 3 views
0

Ich bin neu in Python und ich wollte einen Wörterbuch über die Befehlszeile eingeben und unter Code Druck habe den Schlüssel:Python 3 - Dictionary.items str Objekt hat kein Attribut Element Fehler

for line in sys.stdin: 

    adict ={} 
    line = line.strip() 
    adict = line 

    for key, value in adict.items(): 
     print(key) 

Ich bekomme ständig die error: AttributeError: 'str' -Objekt hat kein Attribut 'items'.

Wenn ich versuche, ein Wörterbuch zu erstellen und drucken, es tut:

data = {} 
data[str(0) + str(1)] = "A " + str(0) + " " + str(1.0) 

for key, value in data.items(): 
    print(key) 

Warum bin ich nicht in der Lage, einen Wörterbuch von der Kommandozeile eingeben und hat den Schlüssel gedruckt? Ich nehme die Wörterbucheingabe ({'01': 'A 0 1.0'}) und speichere sie in einer Wörterbuchvariablen, adict. adict druckt korrekt, aber warum kann ich items() nicht verwenden? Mache ich etwas falsch?

+1

Sie Ihre dict durch die Linie nur überschrieben, die eine Zeichenfolge ist !!! was erwartest du? Was sollte der Schlüssel zu Ihren Daten sein? –

Antwort

1

line ein String ist und Sie haben nur Rebound der adict Namen dem gestrippt Zeichenfolge, so dass Sie nicht haben ein Diktat, aber eine Zeichenfolge.

Sie können stattdessen ast.literal_eval verwenden Ihr Wörterbuch aus dem eingegebenen String zu bauen:

import ast 

adict = ast.literal_eval(input()) 
+0

Danke. Das hat funktioniert – Tao

0

überprüfen Sie Ihre adict Arten zu sehen, wie es den Code ändert sich durch:

for line in sys.stdin: 

    adict ={} 
    line = line.strip() # line here is a string 
    adict = line # so adict will be a string 

    for key, value in adict.items(): # string doesn't have item attribute 
     print(key) 
+0

Danke. Ich habe viel davon verstanden. Aber mein Problem besteht weiter. Für Zeile in sys.stdin ist immer eine Zeichenfolge, wenn ich richtig bin. aber meine Eingabe ist ein Wörterbuch. Wie extrahiere ich meinen Schlüssel, Wert aus einer Zeichenkette? Split scheint eine Menge Arbeit und könnte für große Eingabe falsch sein. was soll ich machen? – Tao

+0

siehe moses antwort, schlägt er dir einen weg – Arman

+0

danke mann. Es funktionierte jetzt – Tao

Verwandte Themen