Ich habe mich gefragt, ob es eine Möglichkeit gibt, ein Wörterbuch in Python mit Schlüsseln, aber ohne entsprechende Werte zu initialisieren, bis ich sie festgelegt habe. Sowie:
Definition = {'apple': , 'ball': }
und später kann ich sie einstellen:
Definition[key] = something
Ich möchte nur Schlüssel initialisieren, kenne aber die entsprechenden Werte erst, wenn ich sie später festlegen muss. Grundsätzlich weiß ich, mit welchen Schlüsseln ich die gefundenen Werte hinzufügen möchte. Vielen Dank.
python
dictionary
initialization
key
user2989027
quelle
quelle
Antworten:
Sie könnten sie auf initialisieren
None
.quelle
None
führt zu einem'NoneType' object does not support item assignment
Fehler ...Definition[key] = something
wannDefinition
istNone
(was hier nicht befürwortet wird), nicht wannDefinition[key]
istNone
(was ist).Verwenden Sie die
fromkeys
Funktion, um ein Wörterbuch mit einem beliebigen Standardwert zu initialisieren. In Ihrem Fall werden Sie mit initialisieren,None
da Sie keinen Standardwert im Auge haben.empty_dict = dict.fromkeys(['apple','ball'])
Dies wird initialisiert
empty_dict
als:empty_dict = {'apple': None, 'ball': None}
Wenn Sie das Wörterbuch mit einem anderen Standardwert als initialisieren möchten, können Sie alternativ Folgendes
None
tun:default_value = 'xyz' nonempty_dict = dict.fromkeys(['apple','ball'],default_value)
quelle
Sie könnten ein Standarddiktat verwenden. Damit können Sie Wörterbuchwerte festlegen, ohne sich Sorgen machen zu müssen, ob der Schlüssel bereits vorhanden ist. Wenn Sie auf einen Schlüssel zugreifen, der noch nicht initialisiert wurde, wird ein von Ihnen angegebener Wert zurückgegeben (im folgenden Beispiel wird None zurückgegeben).
from collections import defaultdict your_dict = defaultdict(lambda : None)
quelle
Es wäre gut zu wissen, was Ihr Zweck ist, warum Sie die Schlüssel überhaupt initialisieren möchten. Ich bin mir nicht sicher, ob Sie das überhaupt tun müssen.
1) Wenn Sie die Anzahl der Vorkommen von Schlüsseln zählen möchten, können Sie einfach Folgendes tun:
Definition = {} # ... Definition[key] = Definition.get(key, 0) + 1
2) Wenn Sie später None (oder einen anderen Wert) für Schlüssel erhalten möchten, auf die Sie nicht gestoßen sind, können Sie erneut einfach die get () -Methode verwenden:
Definition.get(key) # returns None if key not stored Definition.get(key, default_other_than_none)
3) Für alle anderen Zwecke können Sie einfach eine Liste der erwarteten Schlüssel verwenden und prüfen, ob die später gefundenen Schlüssel mit diesen übereinstimmen.
Wenn Sie beispielsweise nur Werte für diese Schlüssel speichern möchten:
expected_keys = ['apple', 'banana'] # ... if key_found in expected_keys: Definition[key_found] = value
Oder wenn Sie sicherstellen möchten, dass alle erwarteten Schlüssel gefunden wurden:
assert(all(key in Definition for key in expected_keys))
quelle
Sie können die Werte als leere Zeichenfolgen initialisieren und später ausfüllen, sobald sie gefunden werden.
dictionary = {'one':'','two':''} dictionary['one']=1 dictionary['two']=2
quelle
q = input("Apple") w = input("Ball") Definition = {'apple': q, 'ball': w}
quelle
Verständnis könnte auch in diesem Fall bequem sein:
# from a list keys = ["k1", "k2"] d = {k:None for k in keys} # or from another dict d1 = {"k1" : 1, "k2" : 2} d2 = {k:None for k in d1.keys()} d2 # {'k1': None, 'k2': None}
quelle
Basierend auf dem klarstellenden Kommentar von @ user2989027 denke ich, dass eine gute Lösung die folgende ist:
definition = ['apple', 'ball'] data = {'orange':1, 'pear':2, 'apple':3, 'ball':4} my_data = {} for k in definition: try: my_data[k]=data[k] except KeyError: pass print my_data
Ich habe versucht, hier nichts Besonderes zu tun. Ich richte meine Daten und ein leeres Wörterbuch ein. Anschließend durchlaufe ich eine Liste von Zeichenfolgen, die potenzielle Schlüssel in meinem Datenwörterbuch darstellen. Ich kopiere jeden Wert von Daten nach my_data, betrachte aber den Fall, in dem Daten möglicherweise nicht den gewünschten Schlüssel haben.
quelle