Erstellen eines neuen Wörterbuchs in Python

454

Ich möchte ein Wörterbuch in Python erstellen. Alle Beispiele, die ich sehe, instanziieren jedoch ein Wörterbuch aus einer Liste usw. ..

Wie erstelle ich ein neues leeres Wörterbuch in Python?

Leora
quelle

Antworten:

661

Aufruf dictohne Parameter

new_dict = dict()

oder einfach schreiben

new_dict = {}
Jan Vorcak
quelle
39
Gibt es einen Unterschied zwischen dict () und {}? Oder ziehen die Leute einfach eins dem anderen vor?
Matt
52
@ Matt Anscheinend ist CPython 2.7 dict () langsamer (6-mal langsamer?), Siehe: teigellmann.com/2012/11/… Auf jeden Fall bevorzuge ich sowieso die Konstruktorsyntax, da ich es einfacher finde, Code einzugeben und zu verschieben zwischen Diktaten und Funktionsaufrufen.
David Wheaton
16
Ich bestätige, dass es dreimal schneller ist, {} als dict () in Python 3.x zu verwenden
Alex Azazel
8
Ja, ich bekomme in Python 3.6 ungefähr 4 Mal schneller für {}mehr dict()und 5 Mal für []mehr list().
Michael Hall
10
In den allermeisten Fällen spielt es keine Rolle, ob es sechsmal länger dauert, da dies immer noch eine unbemerkt geringe Zeit ist.
Hypehuman
247

Du kannst das

x = {}
x['a'] = 1
TJD
quelle
107
+1 für die nächste logische Frage, wie man ein neues Element hinzufügt
Matt Klein
27

Es ist auch nützlich zu wissen, wie man ein voreingestelltes Wörterbuch schreibt:

cmap =  {'US':'USA','GB':'Great Britain'}

# Explicitly:
# -----------
def cxlate(country):
    try:
        ret = cmap[country]
    except KeyError:
        ret = '?'
    return ret

present = 'US' # this one is in the dict
missing = 'RU' # this one is not

print cxlate(present) # == USA
print cxlate(missing) # == ?

# or, much more simply as suggested below:

print cmap.get(present,'?') # == USA
print cmap.get(missing,'?') # == ?

# with country codes, you might prefer to return the original on failure:

print cmap.get(present,present) # == USA
print cmap.get(missing,missing) # == RU
Fyngyrz
quelle
4
Guter Punkt! Aber ich denke, das bisschen mit cxlatelässt Ihre Antwort zu kompliziert erscheinen. Ich würde nur den Initialisierungsteil behalten. ( cxlateselbst ist zu kompliziert. Sie könnten nur return cmap.get(country, '?').)
Daniel Darabos
Verwenden Sie docs.python.org/2/library/…, anstatt eine Übersetzungsfunktion zu schreiben oder überall .get () zu verwenden.
Sparr
1
Vielleicht würde ich, außer dass die Dokumentation für mich absolut undurchsichtig ist - es ist schrecklich. Ich habe keine Ahnung, was sie mir sagen oder warum ich es tun soll. Und .get () scheint genau das Richtige zu tun - und es ist extrem flexibel. Ich bin sicher, es ist ein Mangel an Verständnis meinerseits. In diesem Sinne lauten meine Fragen: Warum sich die Mühe machen? Was wird hier gespeichert, hier einfacher, hier schneller usw.? Nutzen ist genau was?
Fyngyrz
1
Nicht verwandt, aber Sie sollten explizit das KeyErroranstelle eines bloßen außer fangen (was Dinge wie KeyboardInterruptund fangen würde SystemExit).
Arnav Borborah
Arnav, ja natürlich hast du recht. Entsprechend bearbeitet. Vielen Dank!
Fyngyrz
19
>>> dict(a=2,b=4)
{'a': 2, 'b': 4}

Fügt den Wert im Python-Wörterbuch hinzu.

Atul Arvind
quelle
15
d = dict()

oder

d = {}

oder

import types
d = types.DictType.__new__(types.DictType, (), {})
ukessi
quelle
Was ist der Unterschied zwischen types.DictType.__new__(types.DictType, (), {})und nur{}
2
Für jeden, der dies liest: Die letzte "Lösung" ist ein Witz - Sie können sie verwenden (zumindest in Python 2.x - funktioniert nicht in py3k), aber niemand in seinem eigenen Kopf würde dies jemals tun wollen so ;-)
Bruno Desthuilliers
6

Es gibt also zwei Möglichkeiten, ein Diktat zu erstellen:

  1. my_dict = dict()

  2. my_dict = {}

Aber von diesen beiden Optionen {}ist effizienter als dict()plus es ist lesbar. ÜBERPRÜFE HIER

Vishvajit Pathak
quelle
4
>>> dict.fromkeys(['a','b','c'],[1,2,3])


{'a': [1, 2, 3], 'b': [1, 2, 3], 'c': [1, 2, 3]}
Sudhir Tataraju
quelle
Die Frage besagt, dass das Wörterbuch eine neue leere Instanz sein sollte
Wesam