Tworzenie nowego słownika w Pythonie

454

Chcę zbudować słownik w Pythonie. Jednak wszystkie przykłady, które widzę, tworzą instancję słownika z listy itp. ..

Jak utworzyć nowy pusty słownik w Pythonie?

leora
źródło

Odpowiedzi:

661

Zadzwoń dictbez parametrów

new_dict = dict()

lub po prostu napisz

new_dict = {}
Jan Vorcak
źródło
39
Czy jest jakaś różnica między dict () a {}? Czy ludzie po prostu wolą jedno od drugiego?
Matt
51
@ Matt Najwyraźniej CPython 2.7 dict () działa wolniej (6 razy wolniej?), Patrz: doughellmann.com/2012/11/... W każdym razie i tak zaczynam preferować składnię konstruktora, ponieważ łatwiej mi pisać i przenosić kod między nagraniami a wywołaniami funkcji.
David Wheaton,
16
Potwierdzam, że użycie {} niż dict () w python 3.x jest 3 razy szybsze
Alex Azazel
8
Tak, dostaję około 4 razy szybciej w Pythonie 3.6 na {}ponad dict()i 5 razy na []ponad list().
Michael Hall,
10
W zdecydowanej większości przypadków nie ma znaczenia, czy zajmuje to sześć razy dłużej, ponieważ wciąż jest to niezauważalnie krótki czas.
hypehuman
247

Możesz to zrobić

x = {}
x['a'] = 1
TJD
źródło
107
+1 za następne logiczne pytanie, jak dodać do niego nowy element
Matt Klein,
27

Umiejętność pisania gotowego słownika jest również przydatna:

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
źródło
4
Słuszna uwaga! Ale myślę, że to trochę cxlatesprawia, że ​​twoja odpowiedź wydaje się zbyt skomplikowana. Po prostu zatrzymałbym część inicjalizacyjną. ( cxlatesamo w sobie jest zbyt skomplikowane. Można po prostu return cmap.get(country, '?').)
Daniel Darabos,
Rozważ użycie docs.python.org/2/library/… zamiast pisania funkcji tłumaczenia lub używania .get () wszędzie.
Sparr
1
Być może zrobiłbym to, z wyjątkiem tego, że dokumentacja jest dla mnie absolutnie nieprzejrzysta - okropna. Nie mam pojęcia, co każą mi robić ani dlaczego mam to robić. I .get () wydaje się robić dokładnie to samo - a ponadto jest niezwykle elastyczny. Jestem pewien, że to brak zrozumienia z mojej strony. Mając to na uwadze, moje pytania brzmią: po co męczyć? Co tu jest zapisane, łatwiej tutaj, szybciej tutaj itd.? Korzyść jest dokładnie czym?
fyngyrz
1
Niepowiązane, ale powinieneś jawnie złapać KeyErrorzamiast goły, z wyjątkiem (który przechwyciłby takie rzeczy jak KeyboardInterrupti SystemExit).
Arnav Borborah
Arnav, tak, oczywiście, że masz rację. Odpowiednio zredagowane. Dziękuję Ci!
fyngyrz
19
>>> dict(a=2,b=4)
{'a': 2, 'b': 4}

Dodaje wartość do słownika python.

Atul Arvind
źródło
15
d = dict()

lub

d = {}

lub

import types
d = types.DictType.__new__(types.DictType, (), {})
ukessi
źródło
Jaka jest różnica między types.DictType.__new__(types.DictType, (), {})i just{}
2
Dla każdego, kto to czyta: ostatnie „rozwiązanie” to trochę żart - możesz go użyć (przynajmniej w Pythonie 2.x - nie będzie działać w py3k), ale nikt w jego umyśle nigdy nie chciałby tego zrobić więc ;-)
bruno desthuilliers
6

Istnieją więc 2 sposoby na utworzenie dykt:

  1. my_dict = dict()

  2. my_dict = {}

Ale z tych dwóch opcji {}jest skuteczniejszy niż dict()plus czytelny. SPRAWDŹ TUTAJ

Vishvajit Pathak
źródło
4
>>> dict.fromkeys(['a','b','c'],[1,2,3])


{'a': [1, 2, 3], 'b': [1, 2, 3], 'c': [1, 2, 3]}
sudhir tataraju
źródło
pytanie mówi, że słownik powinien być nową pustą instancją
Wesam