Ich habe ein leeres Wörterbuch. Name: dict_x
Es müssen Schlüssel vorhanden sein, deren Werte Listen sind.
Aus einer separaten Iteration erhalte ich einen Schlüssel (z. B. key_123
:) und ein Element (ein Tupel), das in die Liste des dict_x
Wertes eingefügt werden soll key_123
.
Wenn dieser Schlüssel bereits vorhanden ist, möchte ich diesen Artikel anhängen. Wenn dieser Schlüssel nicht vorhanden ist, möchte ich ihn mit einer leeren Liste erstellen und dann an ihn anhängen oder ihn einfach mit einem Tupel erstellen.
Wenn dieser Schlüssel in Zukunft erneut angezeigt wird, möchte ich, dass der Wert erneut angehängt wird, da er vorhanden ist.
Mein Code besteht aus:
Holen Sie sich Schlüssel und Wert.
Überprüfen Sie, ob der Schlüssel NOT in vorhanden ist
dict_x
.und wenn nicht erstellen:
dict_x[key] == []
Danach:
dict_x[key].append(value)
Ist das der Weg, es zu tun? Soll ich versuchen, try/except
Blöcke zu verwenden ?
dict_x[key] = [some_value] if not dict_x.has_key(key) else dict_x[key] + [some_value]
aber diese Antwort schlägt einen weitaus besseren Weg vor. In der Tat wird esset()
als Argument und ermöglicht es Ihnen,add()
Methode zu verwenden ...Hier sind die verschiedenen Möglichkeiten, um dies zu tun, damit Sie vergleichen können, wie es aussieht, und auswählen können, was Ihnen gefällt. Ich habe sie auf eine Weise bestellt, die ich für am "pythonischsten" halte , und die Vor- und Nachteile kommentiert, die auf den ersten Blick nicht offensichtlich sind:
Verwenden von
collections.defaultdict
:Vorteile: Wahrscheinlich beste Leistung. Nachteile: Nicht verfügbar in Python 2.4.x.
Verwenden von
dict().setdefault()
:Nachteile: Ineffiziente Erstellung nicht verwendeter
list()
s.Verwenden von
try ... except
:Oder:
quelle
.setdefault()
unnötige Wörterbücher erstellt werden. Ich denke, ich erstelle unnötigelist
s (dh[]
) im zweiten Argument.setdefault()
, das nie verwendet wird, wenn eskey
bereits existiert. Ich könntedict.setdefault()
(zum Vorteil eines effizienten Schlüssel-Hashing) eine Variable verwenden, um nicht verwendetelist
s wiederzuverwenden, aber das fügt ein paar weitere Codezeilen hinzu..setdefault
erstellt eine regelmäßigedict
Suche nach fehlenden Schlüsseln, führt zu einerKeyError
Weile, wocollections.defaultdict(list)
einedict
Suche nach fehlenden Schlüsseln erstellt wird, fügt eine leere einlist
- ich denke, Sie sollten basierend auf dem gewünschten Verhalten auswählenSie können hierfür ein Standarddikt verwenden .
Dies ist etwas effizienter, als
setdefault
wenn Sie am Ende keine neuen Listen erstellen, die Sie am Ende nicht verwenden. Bei jedem Aufruf vonsetdefault
wird eine neue Liste erstellt, auch wenn das Element bereits im Wörterbuch vorhanden ist.quelle
Sie können defaultdict in verwenden
collections
.Ein Beispiel aus doc:
quelle
quelle
dict.get
).