TypeError: string indices must be integers

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
PNS-Richi
User
Beiträge: 68
Registriert: Donnerstag 17. Januar 2008, 01:48

Dienstag 16. Dezember 2008, 13:37

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
BlackJack

Dienstag 16. Dezember 2008, 13:42

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…
PNS-Richi
User
Beiträge: 68
Registriert: Donnerstag 17. Januar 2008, 01:48

Dienstag 16. Dezember 2008, 14:00

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?
PNS-Richi
User
Beiträge: 68
Registriert: Donnerstag 17. Januar 2008, 01:48

Dienstag 16. Dezember 2008, 14:34

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 ;)
Benutzeravatar
cofi
Moderator
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Dienstag 16. Dezember 2008, 15:32

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
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

Dienstag 16. Dezember 2008, 22:22

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
Antworten