Seite 1 von 1

TypeError: string indices must be integers

Verfasst: Dienstag 16. Dezember 2008, 13:37
von PNS-Richi
Hallo,

In folgenden Script kommt folgende Fehlermledung: TypeError: string indices must be integers

Was es bedeutet ist mir klar. Nur ich frage mich warum dieser Fehler auftritt.

Code: Alles auswählen

#! /usr/bin/env python
# -*- coding: utf-8 -*-

kat = {}
kat['test'] = {}

kat['test']['blub'] = []
kat['test']['blub'].append('test1')
kat['test']['blub'].append('test2')
kat['test']['blub'].append('test3')

# geht
print kat['test']['blub'][0]

# geht nicht
for kat1 in kat:
	for test in kat1['blub']:
		print test
Ich weiß es ist ein nutzloses Script, aber so kann ich den Fehler erneut verursachen.

lg Richi

Verfasst: Dienstag 16. Dezember 2008, 13:42
von BlackJack
In solchen fällen solltest Du einfach mal ein paar ``print``-Anweisungen einbauen. Dann würdest Du schnell feststellen, dass `kat1` an eine Zeichenkette gebunden wird. Und 'test'['blub'] geht eben nicht…

Verfasst: Dienstag 16. Dezember 2008, 14:00
von PNS-Richi

Code: Alles auswählen

for kat1 in kat.items():
so klappt mal das erste, nur wie löse ich folgendes:

Code: Alles auswählen

for test in kat1['blub']:
Im Grunde ist es eine komplexere Mischung aus Listen und Dictionaries.

Wieso wird nach

Code: Alles auswählen

for test in kat1.items():
aus meinen Dictionaries eine Liste?

Verfasst: Dienstag 16. Dezember 2008, 14:34
von PNS-Richi
Hallo,

also folgendes Funktioniert nun so wie ich es will:

Code: Alles auswählen

#! /usr/bin/env python
# -*- coding: utf-8 -*-

kat = {}
kat['test'] = {}

kat['test']['blub'] = []
kat['test']['blub'].append('test1')
kat['test']['blub'].append('test2')
kat['test']['blub'].append('test3')

for test in kat.keys():

	for text in kat[test]['blub']:
		print text
hat etwas gedauert von anderen Sprachen in Pythonisch um zu denken ;)

Verfasst: Dienstag 16. Dezember 2008, 15:32
von cofi
Weil dict.items() nunmal eine Liste zurückgibt.

Ich kenne zwar nicht dein Problem, aber ich glaube nicht, dass Stringliterale zu verwenden die richtige Lösung ist. Schau dir am besten mal die Dict-Methoden an. Auch kommt mir deine Datenstruktur etwas seltsam vor ;)

Btw:

Code: Alles auswählen

In [1]: d = {}

In [2]: d["a"] = 1

In [3]: test = "a"

In [4]: d[test]
Out[4]: 1

Verfasst: Dienstag 16. Dezember 2008, 22:22
von Darii
PNS-Richi hat geschrieben:

Code: Alles auswählen

for test in kat.keys():

	for text in kat[test]['blub']:
		print text
hat etwas gedauert von anderen Sprachen in Pythonisch um zu denken ;)
Oder du nimmst einfach dict.itervalues.

Code: Alles auswählen

for kat1 in kat.itervalues():
    for test in kat1['blub']:
        print test