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

TypeError: string indices must be integers

Beitragvon PNS-Richi » 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

Beitragvon 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

Beitragvon PNS-Richi » 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

Beitragvon PNS-Richi » 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

Beitragvon cofi » 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

Beitragvon Darii » 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

Wer ist online?

Mitglieder in diesem Forum: Google [Bot]