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?

Respuestas:


661

Llamada dictsin parámetros

new_dict = dict()

o simplemente escribe

new_dict = {}

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

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

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.


15
d = dict()

o

d = {}

o

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

¿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Í


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


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

la pregunta establece que el diccionario debería ser una nueva instancia vacía
Wesam
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.