Hallo,
hab hier ein Dict
{ key1: value1, key2: value2 } oder was auch immer, ist ja egal.
Jetzt möchte ich die Möglichkeit haben, "Zwei-Wege" zu setzen. Das heißt, ich möchte über die Angabe von key value setzen und über die Angabe von value key setzen.
Aussehen würde dies dann so:
dict[key1] = abcde
dict[value1] abcde
Wie realisiere ich sowas? Ich dachte mir, nimmst du doch im Falle des key-Setzens durch den value folgenden Vorgang:
* Key rauskriegen, der value als Wert hat
* Den Key:Value aus dem dict löschen
* Neuen Key erstellen mit dem Inhalt des values und als Wert den alten Key, also hab ich nachher value:key
* Dies umdrehen
...andere Ideen?
Gruß
Zwei-Wege Value-setzen in einem Dict
Man könnte den Eindruck gewinnen, dass du davon ausgehst, dass ein value pro dictionary genauso einmalig ist wie ein key im dictionary. Im allgemeinen kannst du davon ja nicht ausgehen (es sei denn, deine Datenstruktur bzw. die Daten sind so, dass du das sicher wissen kannst).
Das könnte also bedeuten, dass du mehrere dictionary-Einträge (die alle den gleichen value haben) entfernst, um sie durch einen einzigen neuen Eintrag zu ersetzen.
Das könnte also bedeuten, dass du mehrere dictionary-Einträge (die alle den gleichen value haben) entfernst, um sie durch einen einzigen neuen Eintrag zu ersetzen.
- birkenfeld
- Python-Forum Veteran
- Beiträge: 1603
- Registriert: Montag 20. März 2006, 15:29
- Wohnort: Die aufstrebende Universitätsstadt bei München
Am simpelsten ist es, zwei Dictionaries zu nehmen:
Das entsprechende set_value() ist dann einfach
Code: Alles auswählen
k2v = {}
v2k = {}
def set_key(k, v):
try:
v2k.pop(k2v[k])
except KeyError:
# Wenn k neu in k2v ist, d.h. k2v[k] fehlschlägt
pass
k2v[k] = v
v2k[v] = k
-
- User
- Beiträge: 996
- Registriert: Mittwoch 9. Januar 2008, 13:48
@birkenfeld: Danke für das "peace of code", leider bin ich noch kein Pythonguru. Könntest du das vielleicht ein bisschen kommentieren, was macht der Code genau und was kommt in die zwei Dics rein?
Danke
Danke
- birkenfeld
- Python-Forum Veteran
- Beiträge: 1603
- Registriert: Montag 20. März 2006, 15:29
- Wohnort: Die aufstrebende Universitätsstadt bei München
Das eine Dict mappt Keys zu Values, das andere die Gegenrichtung.
Die Funktion set_key() -- und ein entsprechendes set_value() -- tragen ein Key-Value-Paar in beide Dicts ein, sodass sie konsistent bleiben.
Die Funktion set_key() -- und ein entsprechendes set_value() -- tragen ein Key-Value-Paar in beide Dicts ein, sodass sie konsistent bleiben.