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.

77
user2989027 19 Nov. 2013 im 22:53

7 Antworten

Beste Antwort

Sie können sie mit None initialisieren.

56
aga 19 Nov. 2013 im 18:56

Verwenden Sie die Funktion fromkeys, um ein Wörterbuch mit einem beliebigen Standardwert zu initialisieren. In Ihrem Fall initialisieren Sie mit None, da Sie keinen Standardwert im Auge haben.

empty_dict = dict.fromkeys(['apple','ball'])

Dadurch wird empty_dict wie folgt initialisiert:

empty_dict = {'apple': None, 'ball': None}

Wenn Sie das Wörterbuch mit einem anderen Standardwert als None initialisieren möchten, können Sie alternativ Folgendes tun:

default_value = 'xyz'
nonempty_dict = dict.fromkeys(['apple','ball'],default_value)
76
user369450 3 Feb. 2015 im 15:01

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.

0
Robert Lugg 18 März 2014 im 00:35

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))
7
user2443147user2443147 28 Juli 2014 im 23:01

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)
9
Hammer 19 Nov. 2013 im 19:09
q = input("Apple")
w = input("Ball")
Definition = {'apple': q, 'ball': w}
2
Aktufono 10 Jän. 2017 im 23:58

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
4
creggnog 19 Nov. 2013 im 19:00