Crear un nuevo diccionario en Python

454

Quiero construir un diccionario en Python. Sin embargo, todos los ejemplos que veo son crear instancias de un diccionario de una lista, etc. ..

¿Cómo creo un nuevo diccionario vacío en Python?

leora
fuente

Respuestas:

661

Llamada dictsin parámetros

new_dict = dict()

o simplemente escribe

new_dict = {}
Jan Vorcak
fuente
39
¿Hay alguna diferencia entre dict () y {}? ¿O la gente simplemente prefiere uno sobre el otro?
Matt
52
@ Matt Aparentemente, CPython 2.7 dict () es más lento (¿6 veces más lento?), Consulte: doughellmann.com/2012/11/… En cualquier caso, estoy empezando a preferir la sintaxis del constructor de todos modos, ya que me resulta más fácil escribir y mover código entre dictados y llamadas a funciones.
David Wheaton
16
Confirmo que es 3 veces más rápido usar {} que dict () en python 3.x
Alex Azazel
8
Sí, obtengo aproximadamente 4 veces más rápido en Python 3.6 para {}más dict()y 5 veces para []más list().
Michael Hall
10
En la gran mayoría de los casos, no importa si tarda seis veces más, ya que todavía es una cantidad de tiempo notablemente pequeña.
hipehumano
247

Puedes hacerlo

x = {}
x['a'] = 1
TJD
fuente
107
+1 para la próxima pregunta lógica de cómo agregarle un nuevo elemento
Matt Klein
27

También es útil saber cómo escribir un diccionario preestablecido:

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
fuente
44
¡Buen punto! Pero creo que un poco cxlatehace que tu respuesta parezca demasiado complicada. Solo me quedaría con la parte de inicialización. (en cxlatesí mismo es demasiado complicado. Podría simplemente return cmap.get(country, '?')).
Daniel Darabos
Considere usar docs.python.org/2/library/… en lugar de escribir una función de traducción o usar .get () en todas partes.
Sparr
1
Quizás lo haría, excepto que la documentación es absolutamente opaca para mí, es terrible. No tengo idea de lo que me dicen que haga o por qué debería hacerlo. Y .get () parece hacer exactamente lo correcto, además es extremadamente flexible. Estoy seguro de que es una falta de comprensión de mi parte. Con eso en mente, mis preguntas son: ¿por qué molestarse? ¿Qué se guarda aquí, más fácil aquí, más rápido aquí, etc.? ¿El beneficio es exactamente qué?
fyngyrz 01 de
1
Sin relación, pero debe capturar explícitamente el en KeyErrorlugar de un simple excepto (que capturaría cosas como KeyboardInterrupty SystemExit).
Arnav Borborah
Arnav, sí, por supuesto que tienes razón. Editado en consecuencia. ¡Gracias!
fyngyrz
19
>>> dict(a=2,b=4)
{'a': 2, 'b': 4}

Agregará el valor en el diccionario python.

Atul Arvind
fuente
15
d = dict()

o

d = {}

o

import types
d = types.DictType.__new__(types.DictType, (), {})
ukessi
fuente
¿Cuál es la diferencia entre types.DictType.__new__(types.DictType, (), {})y solo{}
2
Para cualquiera que lea esto: la última "solución" es una broma: puede usarla (en Python 2.x al menos, no funcionará en py3k), pero nadie en su propia mente querría hacer so ;-)
bruno desthuilliers
6

Entonces hay 2 formas de crear un dict:

  1. my_dict = dict()

  2. my_dict = {}

Pero de estas dos opciones {}es más eficiente que dict()más legible. CHEQUEA AQUÍ

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


{'a': [1, 2, 3], 'b': [1, 2, 3], 'c': [1, 2, 3]}
sudhir tataraju
fuente
la pregunta establece que el diccionario debería ser una nueva instancia vacía
Wesam