Der Code findet sich (hoffentlich) hier.
Der auskommentierte Teil soll (aus vermutlich offenkundigen Gründen

Gibt es einen Weg, die Schlüsseleinträge aus der Liste zu "aufzuarbeiten", daß sie als aufeinanderfolgende Schlüssel ausgewertet werden?
Code: Alles auswählen
In [1]: liste = ["hallo", "welt"]
In [2]: liste
Out[2]: ['hallo', 'welt']
In [3]: liste = ["hallo"]
In [4]: liste
Out[4]: ['hallo']
In [5]: liste.append("welt")
In [6]: liste
Out[6]: ['hallo', 'welt']
Warum? Ich habe nie behauptet, ein begnadeter Programmierer zu sein. Ich behelfe mir halt, so gut ich kann.BlackJack hat geschrieben:Das ist ein schlechter Witz, oder?
Meine Liste kommt zu Anfang aus einer Textdatei, ja. Und ich brauche die einzelnen Einträge als Schlüssel für ein ineinandergeschachteltes Dictionary. Der Umweg über eine Liste ergibt sich daraus, daß ich die mit "splitlines" ohnehin bekomme. Die anderen Versionen, die Begriffe zu bekommen, haben nicht geklappt (ich habe, wie erwähnt, nie behauptet, ein begnadeter Programmierer zu sein). Die grundlegensten Dinge von Python sind insofern kein wirklich hilfreicher Kommentar.nkoehring hat geschrieben:Was genau machst du denn da? Koenntest du mal zeigen, wie es denn aussehen soll oder so?
Eine Vermutung: Kann es sein, dass deine Liste ein String ist und du doch tatsaechlich versuchst mit diesen eckigen Klammern eine List daraus werden zu lassen? Wenn ja, solltest du dich dringenst mit den grundlegenden Dingen in Python auseinander setzen.
Hmm... also ich versuchs nochmal, in der Hoffnung, dass du den guten Willen erkennst und ihn auch bei dir auspraegst!merlin_emrys hat geschrieben:Warum? Ich habe nie behauptet, ein begnadeter Programmierer zu sein. Ich behelfe mir halt, so gut ich kann.BlackJack hat geschrieben:Das ist ein schlechter Witz, oder?
Auch wenn Du es witzig findest - ich wäre an Hilfe interessiert, nicht an Spott.
Meine Liste kommt zu Anfang aus einer Textdatei, ja. Und ich brauche die einzelnen Einträge als Schlüssel für ein ineinandergeschachteltes Dictionary. Der Umweg über eine Liste ergibt sich daraus, daß ich die mit "splitlines" ohnehin bekomme. Die anderen Versionen, die Begriffe zu bekommen, haben nicht geklappt (ich habe, wie erwähnt, nie behauptet, ein begnadeter Programmierer zu sein). Die grundlegensten Dinge von Python sind insofern kein wirklich hilfreicher Kommentar.nkoehring hat geschrieben:Was genau machst du denn da? Koenntest du mal zeigen, wie es denn aussehen soll oder so?
Eine Vermutung: Kann es sein, dass deine Liste ein String ist und du doch tatsaechlich versuchst mit diesen eckigen Klammern eine List daraus werden zu lassen? Wenn ja, solltest du dich dringenst mit den grundlegenden Dingen in Python auseinander setzen.
Auch den Hinweis auf append kann ich nicht einordnen. Damit die Listeneinträge als aufeinanderfolgende Schlüssel funktionieren, brauche ich sie ja jeweils als eigenes Element.
Code: Alles auswählen
In [11]:# dies sei der Einfachheit halber mal der Inhalt der Konfigurationsdatei
# zB mit file(path, "r").read().strip() ausgelesen
s="""test=eins,zwei,drei
....: blub=hans,dieter,bernd"""
In [12]: s
Out[12]: 'test=eins,zwei,drei\nblub=hans,dieter,bernd'
In [13]: print s
test=eins,zwei,drei
blub=hans,dieter,bernd
In [14]: config = dict()
In [15]: for line in s.split("\n"):
....: key, values = line.split("=")
....: config[key] = values.split(",")
....:
....:
In [17]: config
Out[17]: {'blub': ['hans', 'dieter', 'bernd'], 'test': ['eins', 'zwei', 'drei']}
Ich bin nicht sicher, ob ich es in Worten verständlicher ausdrücken kann - mir fehlt hier übliches Fachvokabular, was dann ja auch wieder Verwirrung stiften kann.BlackJack hat geschrieben:Mein Kommentar sollte sagen: Kein Mensch, ausser Dir wird verstehen was die Eingabedaten bedeuten und was dieser Code daraus macht. Das ist einfach nicht wirklich verständlich.
Der gute Wille ist schon da, er hilft nur nicht, weil ihm so gut wie keinerlei Fähigkeiten beistehen ... Immerhin hab ich geschafft, den Code bei pocoo unterzubringen, für Nicht-Fachleute ist das schon schwierignkoehring hat geschrieben: Hmm... also ich versuchs nochmal, in der Hoffnung, dass du den guten Willen erkennst und ihn auch bei dir auspraegst!
Code: Alles auswählen
>>> lines = ('# comment', '- main group', '-- sub group [42]', 'garbage')
>>> list(parse_lines(lines))
[(1, 'main group', None), (2, 'sub group', '42')]
Ganz herzlichen Dank... Leider haben mit die fast 24 Stunden noch nicht gereicht, ihn zu verstehenBlackJack hat geschrieben:Lösungsvorschlag: http://paste.pocoo.org/show/20610/
Vermutlich muß ich mich doch erst nach einem Python-Kurs umsehen...BlackJack hat geschrieben: Daraus wird in `build_dict()` das Dictionary aufgebaut. Dabei kommt ein `collections.defaultdictionary` zum Einsatz, das seine eigene Klasse als Default-Wert hat.
Code: Alles auswählen
In [232]: from collections import defaultdict
In [233]: a = defaultdict(int)
In [234]: a
Out[234]: defaultdict(<type 'int'>, {})
In [235]: a['answer'] = 42
In [236]: a
Out[236]: defaultdict(<type 'int'>, {'answer': 42})
In [237]: a['answer']
Out[237]: 42
In [238]: a['spam']
Out[238]: 0
In [239]: int()
Out[239]: 0
Code: Alles auswählen
In [240]: class NestedDefaultDict(defaultdict):
.....: def __init__(self):
.....: defaultdict.__init__(self, NestedDefaultDict)
.....:
In [241]: a = NestedDefaultDict()
In [242]: a
Out[242]: defaultdict(<class '__main__.NestedDefaultDict'>, {})
In [243]: a['Hauptgruppe']
Out[243]: defaultdict(<class '__main__.NestedDefaultDict'>, {})
In [244]: a
Out[244]: defaultdict(<class '__main__.NestedDefaultDict'>, {'Hauptgruppe':
defaultdict(<class '__main__.NestedDefaultDict'>, {})})