Wenn ich mit Hashtabellen/Wörterbüchern arbeite, habe ich manchmal Probleme mit der Angabe von Schlüsseln.Wo speichere ich Hashtabellen- oder Dictionary-Schlüsselnamen?
Zum Beispiel: Wenn ich ein einfaches Wörterbuch erstellen (unter Verwendung von Python für dieses Beispiel),
foo = {'bar': 'baz', 'foobar': 'foobaz' }
Ich kann Wert zugreifen (in anderen Modulen) mit den Schlüsselwerten: (foo['bar']
) und baz
zurück.
In den Worten von Dr. Evil, "ziemlich Standard, wirklich."
Leider verbindet die Verwendung von statischen Strings für Keys alle Module, die dieses Dictionary verwenden, eng an die Implementierung. Dies kann natürlich auch bei Verwendung anderer Schlüsseltypen (z. B. Enums, Objekte usw.) gelten; Wie auch immer Sie es schneiden, alle Module, die auf das Wörterbuch zugreifen, müssen die Werte für die Schlüssel kennen.
Um dies zu beheben, verwende ich normalerweise statische String-Werte (oder Enums, falls in der Sprache verfügbar) für Schlüssel und speichern sie entweder öffentlich in der lokalen Klasse/Modul oder in einem separaten Modul/Klasse. Daher werden alle Änderungen an den Wörterbuchschlüsseln selbst an einem einzigen Ort gespeichert.
Das sieht in der Regel wie folgt aus:
BAR_KEY = 'bar'
foo[BAR_KEY] = 'foobar'
Gibt es bessere Möglichkeiten der Schlüssel, so dass die Verwendung des Wörterbuchs nicht unbedingt Paar ein Modul/Klasse zu deren Umsetzung Angabe?
Hinweis: Ich habe einige Antworten in SO gesehen, die sich mit diesem Thema befassen (z. B. property-to-reference-a-key-value-pair-in-a-dictionary), aber die Themen scheinen dieses Problem nicht speziell zu beheben. Die Antworten waren hilfreich, aber ich hätte gerne mehr Erfahrung.
guter Punkt, wenn die Schlüssel immer bekannt und konstant sind, wäre es besser, sie in eine Klasse/Struktur mit Eigenschaften zu setzen. – CodingWithSpike
Nun, normalerweise mache ich das, wenn das Wörterbuch von mehreren (3+) Modulen benutzt wird. Aber wenn ich nur ein einfaches Wörterbuch von einem Modul zum anderen gebe, scheint das nicht etwas übertrieben zu sein? Sie könnten mit einer Reihe von Property-Klassen enden :) – bedwyr
@bedwyr, Sicherlich nicht zu viel für Python (siehe Jensens Antwort). Erleichtert auch das Verständnis, da die Struktur definiert ist. (Natürlich können Sie in einer dynamisch typisierten Sprache damit herumspielen ...) – strager