it-swarm.com.de

Wie kann man ein Diktier mit Schlüsseln aus einer Liste und leeren Werten in Python initialisieren?

Ich würde gerne davon bekommen:

keys = [1,2,3]

zu diesem:

{1: None, 2: None, 3: None}

Gibt es eine pythonische Methode, dies zu tun?

Dies ist eine hässliche Methode, dies zu tun:

>>> keys = [1,2,3]
>>> dict([(1,2)])
{1: 2}
>>> dict(Zip(keys, [None]*len(keys)))
{1: None, 2: None, 3: None}
181
Juanjo Conti

dict.fromkeys([1, 2, 3, 4])

Dies ist eigentlich eine Klassenmethode, daher funktioniert sie auch für Diktat-Unterklassen (wie collections.defaultdict). Das optionale zweite Argument gibt den für die Schlüssel zu verwendenden Wert an (standardmäßig None).

341
Thomas Wouters

niemand wollte eine Diktierverständnislösung geben?

>>> keys = [1,2,3,5,6,7]
>>> {key: None for key in keys}
{1: None, 2: None, 3: None, 5: None, 6: None, 7: None}
195
Adrien Plisson
dict.fromkeys(keys, None)
52
Dominic Cooney
>>> keyDict = {"a","b","c","d"}

>>> dict([(key, []) for key in keyDict])

Ausgabe:

{'a': [], 'c': [], 'b': [], 'd': []}
11
Mayur Koshti
d = {}
for i in keys:
    d[i] = None
7
inspectorG4dget

In viele Workflows, bei denen Sie einen Standard-/Anfangswert für beliebige Schlüssel verwenden möchten, müssen Sie need nicht dazu verwenden, jeden Schlüssel einzeln zu hashieren. Sie können collections.defaultdict verwenden. Zum Beispiel:

from collections import defaultdict

d = defaultdict(lambda: None)

print(d[1])  # None
print(d[2])  # None
print(d[3])  # None

Dies ist effizienter, es erspart Ihnen, bei der Instantiierung alle Ihre Schlüssel zu markieren. Außerdem ist defaultdict eine Unterklasse von dict, so dass normalerweise keine Konvertierung in ein reguläres Wörterbuch erforderlich ist.

Für Workflows, bei denen Sie erforderlich für zulässige Schlüssel festlegen, können Sie dict.fromkeys entsprechend der akzeptierten Antwort verwenden:

d = dict.fromkeys([1, 2, 3, 4])
0
jpp