Creazione di un nuovo dizionario in Python


454

Voglio costruire un dizionario in Python. Tuttavia, tutti gli esempi che vedo stanno istanziando un dizionario da un elenco, ecc. ..

Come faccio a creare un nuovo dizionario vuoto in Python?

Risposte:


661

Chiama dictsenza parametri

new_dict = dict()

o semplicemente scrivere

new_dict = {}

39
C'è qualche differenza tra dict () e {}? O le persone preferiscono semplicemente l'una all'altra?
Matt

52
@ Matt Apparentemente CPython 2.7 dict () è più lento (6 volte più lento?), Vedi: doughellmann.com/2012/11/… In ogni caso sto iniziando a preferire comunque la sintassi del costruttore poiché trovo più facile digitare e spostare il codice tra dicts e chiamate di funzione.
David Wheaton,

16
Confermo che è 3 volte più veloce usare {} di dict () in Python 3.x
Alex Azazel,

8
Sì, ottengo circa 4 volte più veloce in Python 3.6 per {}oltre dict()e 5 volte per []oltre list().
Michael Hall,

10
Nella stragrande maggioranza dei casi, non importa se impiega sei volte di più, dal momento che è ancora una quantità di tempo sorprendentemente piccola.
hypehuman

247

Puoi farlo

x = {}
x['a'] = 1

107
+1 per la prossima domanda logica su come aggiungere un nuovo elemento ad esso
Matt Klein,

27

Sapere come scrivere un dizionario predefinito è utile anche sapere:

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
Buon punto! Ma penso che il bit con la cxlatetua risposta sembri troppo complicato. Terrei solo la parte di inizializzazione. (di per cxlatesé è troppo complicato. Potresti semplicemente return cmap.get(country, '?').)
Daniel Darabos,

Prendi in considerazione l'uso di docs.python.org/2/library/… invece di scrivere una funzione di traduzione o di usare .get () ovunque.
Sparr,

1
Forse lo farei, tranne per il fatto che la documentazione è assolutamente opaca per me - è terribile. Non ho idea di cosa mi stiano dicendo o del perché dovrei farlo. E .get () sembra fare esattamente la cosa giusta - inoltre è estremamente flessibile. Sono sicuro che sia una mancanza di comprensione da parte mia. Con questo in mente, le mie domande sono: perché preoccuparsi? Cosa viene salvato qui, più facile qui, più veloce qui, ecc.? Il vantaggio è esattamente cosa?
fyngyrz,

1
Non correlato, ma dovresti catturare esplicitamente KeyErrorinvece di uno bare tranne (che catturerebbe cose come KeyboardInterrupte SystemExit).
Arnav Borborah

Arnav, sì certo che hai ragione. Modificato di conseguenza. Grazie!
fyngyrz,

19
>>> dict(a=2,b=4)
{'a': 2, 'b': 4}

Aggiungerà il valore nel dizionario Python.


15
d = dict()

o

d = {}

o

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

Qual'è la differenza tra types.DictType.__new__(types.DictType, (), {})e just{}

2
Per chiunque legga questo: l'ultima "soluzione" è un po 'uno scherzo - puoi usarla (almeno in Python 2.x - non funzionerà in py3k), ma nessuno nella sua mente vorrebbe mai fare così ;-)
bruno desthuilliers

6

Quindi ci sono 2 modi per creare un dict:

  1. my_dict = dict()

  2. my_dict = {}

Ma tra queste due opzioni {}è più efficiente di dict()più è leggibile. CONTROLLA QUI


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


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

la domanda afferma che il dizionario dovrebbe essere una nuova istanza vuota
Wesam,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.