"Int" -Objekt ist nicht lesbar

Ich versuche, eine for-Schleife auszuführen. Hier ist der Abschnitt von meinem Code Ich habe Probleme mit:

aldurstengd_ororka = {(18, 19, 20, 21, 22, 23, 24):1, (25):0.95, (26):0.90, (27):0.85, (28, 29):0.75, (30, 31):0.65, (32, 33):0.55, (34, 35):0.45, (36, 37):0.35, (40, 41, 42, 43, 44, 45):0.15, (46, 47, 48, 49, 50):0.10, (51, 52, 53, 54, 55):0.075, (56, 57, 58, 59, 60):0.05, (61, 62, 63, 64, 65, 66):0.025} for age in aldurstengd_ororka.keys(): for item in age: if ororkualdur == item: baetur = baetur + ororkulifeyrir * aldurstengd_ororka([age]) 

Also meine Absicht ist, durch aldurstengd_ororka zu laufen, und für jedes "Alter" Tupel im Wörterbuch, ich laufe ein anderes für Schleife für jeden "Gegenstand" innerhalb des Tupels. Der Fehler, den ich bekomme, ist

TypeError: 'int' Objekt ist nicht lesbar

3 Solutions collect form web for “"Int" -Objekt ist nicht lesbar”

Wenn aldurstengd_ororka ein Wörterbuch ist, dann ist dieser Ausdruck:

 aldurstengd_ororka([age]) 

Ist ein Fehler. Vielleicht hast du so etwas gemeint:

 aldurstengd_ororka[(age)] 

EDIT: Der Fehler, den du gesehen hast, ist sehr interessant, ich habe es mit diesem Snippet reproduziert:

 for age in aldurstengd_ororka.keys(): print 'age:', age for item in age: print item 

Die Ausgabe des Codes ist:

 age: (32, 33) 32 33 age: (36, 37) 36 37 age: (51, 52, 53, 54, 55) 51 52 53 54 55 age: (61, 62, 63, 64, 65, 66) 61 62 63 64 65 66 age: (30, 31) 30 31 age: 25 --------------------------------------------------------------------------- TypeError Traceback (most recent call last) /home/ma/mak/Documents/t.py in <module>() 3 for age in aldurstengd_ororka.keys(): 4 print 'age:', age ----> 5 for item in age: 6 print item 7 TypeError: 'int' object is not iterable 

Also, was passiert, ist Python 'entpackt' ein Tupel von 1 Element bei der Zuweisung an die Altersvariable. Also Alter statt (25) , wie man erwarten würde, ist nur 25 … Es ist ein bisschen seltsam. Ein Workaround wäre, um so etwas wie zu tun:

 for age in aldurstengd_ororka.keys(): # if not tuple, make it a tuple: if not type(age) == type( (0,1) ): age = (age,) print 'age:', age for item in age: print item 

Ihre Tupel-Tasten, die nur ein einziges int in ihnen haben, werden als int anstelle eines Tupels analysiert. Also, wenn Sie versuchen, für Artikel im Alter – Sie versuchen zu iterieren durch eine nicht-iterable. Verwenden Sie Listen [4] oder verwenden Sie ein Komma (4,) , und es wird den Trick machen:

 aldurstengd_ororka = {(18, 19, 20, 21, 22, 23, 24):1, (25):0.95, (26):0.90, (27):0.85, (28, 29):0.75, (30, 31):0.65, (32, 33):0.55, (34, 35):0.45, (36, 37):0.35, (40, 41, 42, 43, 44, 45):0.15, (46, 47, 48, 49, 50):0.10, (51, 52, 53, 54, 55):0.075, (56, 57, 58, 59, 60):0.05, (61, 62, 63, 64, 65, 66):0.025} for age in aldurstengd_ororka.keys(): if isinstance(age, [tuple, list]): for item in age: if ororkualdur == item: baetur = baetur + ororkulifeyrir * aldurstengd_ororka[age] else: baetur = baetur + ororkulifeyrir * aldurstengd_ororka[age] 

Ich hasse es zu sagen, aber beide sihrc und piokuc sind falsch

Sie haben ein Wörterbuch des Formats:

 d = { (1,2,3) : "a", (4) : "b" } 

Der erste Schlüssel (1,2,3) ist ein Tupel mit 3 Integers darin. Der zweite Schlüssel (4) ist nur eine Ganzzahl mit dem Wert 4, kein Tupel. Das definierende Merkmal eines Tupels ist das Komma, das die Werte trennt, nicht die Klammern, also a = 1,2,3 erzeugt ein Tupel und ordnet es a .

Der Hauptzweck der Klammern um Tupel ist es, den Code sauberer zu machen und einige der Randfälle zu vereinfachen, wie zB Einzelstück-Tupel.

Um die 4 in ein einzelnes Item-Tupel umzuwandeln, musst du etwas Ungewöhnliches machen, folge ein nachlaufendes Komma nach dem Wert, also (4,) .

Wenn Sie dies tun, um alle einzelnen Element-Tasten in Ihrem Wörterbuch, sollten Sie feststellen, dass es funktioniert OK.

Python ist die beste Programmiersprache der Welt.