Python: Ist es sinnvoll, None als Wörterbuchschlüssel zu verwenden?
Keiner scheint zu funktionieren wie ein Wörterbuch Schlüssel, aber ich Frage mich ob, das wird nur zu Problemen führen später. Zum Beispiel, das funktioniert:
>>> x={'a':1, 'b':2, None:3}
>>> x
{'a': 1, None: 3, 'b': 2}
>>> x[None]
3
Den tatsächlichen Daten ich arbeite mit Bildungsstandards. Jeder standard ist verbunden mit einem content-Bereich. Einige standards sind auch im Zusammenhang mit dem Inhalt Teilbereichen. Ich würde gerne eine verschachtelte Wörterbuch der form {contentArea:{contentSubArea:[standards]}}
. Einige dieser contentSubArea Schlüssel wäre Keine.
Insbesondere Frage ich mich, ob dies wird zu Verwirrung führen, wenn ich einen Schlüssel, der nicht existiert, irgendwann, oder so unerwarteten wie.
NaN
als ein Schlüssel. Es ist trügerisch, denn es ist hashable, aber nicht zu vergleichen, gleich selbst. Das ist: float('nan') == float('nan')
gibt False
, wie es sollte, auf zwei Python-Implementierungen, die ich ausprobiert habe. Wenn Sie es verwenden, wie ein Schlüssel in einem Wörterbuch, es nicht zu erhöhen eine Ausnahme, und verwenden Sie es als ein index funktioniert, wenn, und nur wenn es das gleiche ist NaN
- Objekt (hat den gleichen id(..)
), obwohl dieser möglicherweise von der Implementierung abhängig sein. So könnte es funktionieren wie erwartet, für eine Weile und dann fail. Keines dieser Probleme Einfluss auf None
, auch nur, weil es gibt nur ein None
. InformationsquelleAutor der Frage japhyr | 2011-08-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Jede hashable-Wert ist ein Gültiger Python-Dictionary-Schlüssel. Aus diesem Grund, Keiner ist perfekt Gültiger Kandidat. Es gibt keine Verwirrung bei der Suche nach nicht-existenten Schlüssel - das Vorhandensein von Keiner, wie ein Schlüssel, würde nicht auf die Möglichkeit zu prüfen, ob ein anderer Schlüssel vorhanden war. Ex:
Es gibt keinen Konflikt, und Sie können testen, für die es genauso wie die normalen. Es sollte nicht dazu führen Sie ein problem. Die standard 1-zu-1 Schlüssel-Wert-Verein existiert noch, so dass Sie nicht haben, können verschiedene Dinge in der Keine Schlüssel, aber mit Keiner wie ein Schlüssel sollte kein problem darstellen sich von selbst.
InformationsquelleAutor der Antwort g.d.d.c
None
ist nicht speziell auf eine Besondere Weise, es ist nur ein weiteres python-Wert. Seine einzige Unterscheidung ist, dass es passiert zu sein, den Rückgabewert einer Funktion, die nicht geben Sie einen beliebigen anderen Wert zurück, und es kommt auch zu einem gemeinsamen Standard-Wert (default argdict.get()
zum Beispiel).Sie verursachen keine Laufzeit-Konflikte, indem diese wie ein Schlüssel, aber Sie sollten sich Fragen, ob das wirklich eine sinnvolle Wert für einen Schlüssel. Es ist oft hilfreicher, aus der Sicht des Lesens von code und das Verständnis, was es bedeutet, die Verwendung einer benannten Instanz für Besondere Werte. So etwas wie:
InformationsquelleAutor der Antwort SingleNegationElimination
Du willst ärger? hier gehen wir:
Also ja, besser bleiben Weg von json-wenn Sie
None
als Schlüssel. Sie können mit dem patch diese durch benutzerdefinierte (de/)serializer, aber ich rate gegen die Verwendung vonNone
wie ein Schlüssel in den ersten Platz.InformationsquelleAutor der Antwort Maciej Urbański
Scheint es mir, den größeren, später problem ist. Wenn Ihr Prozess ist die Schaffung Paare und einige Paare haben ein "None" - Taste, dann wird es überschreiben alle vorherigen Keine Paare. Ihr Wörterbuch wird automatisch throw-out-Werte, denn Sie hatte Keine doppelte Schlüssel. Nein?
InformationsquelleAutor der Antwort user3023464
Komisch, auch das funktioniert :
InformationsquelleAutor der Antwort sb32134
Nicht. Es wird nur dazu führen, dass Kopfschmerzen in der Zukunft. Verwenden Sie einen dummy-null anstelle von tatsächlichen "null", wenn Sie nicht über eine
contentSubArea
- Taste.InformationsquelleAutor der Antwort zellio