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?

Antworten:


661

Aufruf dictohne Parameter

new_dict = dict()

oder einfach schreiben

new_dict = {}

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

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

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.


15
d = dict()

oder

d = {}

oder

import types
d = types.DictType.__new__(types.DictType, (), {})

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


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


{'a': [1, 2, 3], 'b': [1, 2, 3], 'c': [1, 2, 3]}

Die Frage besagt, dass das Wörterbuch eine neue leere Instanz sein sollte
Wesam
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.