[Python][Dictionary] Mehrere Values einem Schlüssel zufügen

Bexx

Verrückte Erfinderin bei Daniel Düsentrieb
Hallo,

ich habe ein Problem und bräuchte Hilfe.
Ich lese mit einem Skript zeilenweise eine Datei aus, splitte den Inhalt und füge ganz bestimmte Stellen (immer diesselben) einer Dictionary Variablen zu.
Das Problem liegt darin, dass wenn ich den Key zwei- oder mehrmals in der Datei habe und jeweils verschiedene Values mit ihm zusammenhängen und meine Dictionary-Variable den nächsten einfach ignoriert.

Die doppelten Keys werden sehr wahrscheinlich nicht immer direkt hintereinander auftauchen und ich weiss nicht wie ich einem Key mehrere Values zufügen muss, bzw. wie ich überhaupt am schlausten auf einen bereits vorhanden Key in meinem Dictionary prüfe. Zur Not würde ich das ganze in einer Schleife durchlaufen,
aber es wäre natürlich besser, wenn es da evtl. schon eine Methode gäbe die das schneller und einfacher macht.

Für eure Hilfe wäre ich sehr dankbar

und liebe Grüße von der Saar :)


/EDIT:
Die Frage nach der besten Methode um auf einen bereits vorhandenen Key zu testen habe ich gerade herausgefunden :)
 
Zuletzt bearbeitet:
Hallo Bexx,

wenn ich dich richtig verstanden habe, möchtest du mehrere Werte für einen Schlüssel in einem Dictionary speichern. Dazu könntest du einfach Arrays im Dictionary ablegen, z.B. so:
Python:
d = {}

for t in (("key1", "value1-1"),
          ("key2", "value2-1"),
          ("key1", "value1-2"),
          ("key1", "value1-3"),
          ("key2", "value2-2")):
    key = t[0]
    value = t[1]
    if key in d:
        d[key].append(value)
    else:
        d[key] = [value]

print d
# => {'key2': ['value2-1', 'value2-2'], 'key1': ['value1-1', 'value1-2', 'value1-3']}

Grüße, Matthias
 
Hallo,

ein wenig kompakter ginge es auch noch so:
Python:
rows = (
            ("key1", "value1-1"),
            ("key2", "value2-1"),
            ("key1", "value1-2"),
            ("key1", "value1-3"),
            ("key2", "value2-2")
        )

data = {}

for row in rows:
    data.setdefault(row[0],[]).append(row[1])

print data

Ausgabe:
Code:
{'key2': ['value2-1', 'value2-2'], 'key1': ['value1-1', 'value1-2', 'value1-3']}

Gruß Tom
 
Perfekt, das ist genau wonach ich gesucht habe :)
Vielen Dank :)
 
Zurück