2011-12-08 14 views
260

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

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

Respuesta

380

llamada dict sin parámetros

new_dict = dict() 

o simplemente escribir

new_dict = {} 
+18

¿Hay alguna diferencia entre dict() y {}? ¿O la gente simplemente prefiere uno sobre el otro? – Matt

+30

@ Matt Aparentemente, CPython 2.7 dict() es más lento (¿6 veces más lento?), Consulte: http://doughellmann.com/2012/11/the-performance-impact-of-using-dict-instead-of-in- cpython-2-7-2.html 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 los dicts y las llamadas a funciones. –

+0

@DavidWheaton ¡Gracias por señalar esto! Personalmente, encuentro 'new_dict = dict()' un poco más legible, sin embargo, si hay una gran diferencia en cuanto a rendimiento ... ¡Sería bueno para el rendimiento! ;) (Para aquellos que están confundidos acerca de Python y Cphython ver: [aquí] (http://stackoverflow.com/a/17130986/4773274)) – holzkohlengrill

144

Usted puede hacer esto

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

+1 para la siguiente pregunta lógica sobre cómo agregarle un nuevo elemento –

12
d = dict() 

o

d = {} 

o

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

Saber cómo escribir un diccionario predefinido es útil saber así:

cmap = {'US':'USA','GB':'Great Britain'} 

def cxlate(country): 
    try: 
     ret = cmap[country] 
    except: 
     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

¡Buen punto! Pero creo que el bit con 'cxlate' hace que tu respuesta parezca demasiado complicada. Solo mantendría la parte de inicialización. ('cxlate' en sí mismo es demasiado complicado. Podría simplemente' devolver cmap.get (país, '?') '.) –

+0

Considere usar https://docs.python.org/2/library/collections.html#collections. defaultdict 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.? Beneficio es exactamente lo que? – fyngyrz

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

se sumará el valor en el diccionario de Python.

Cuestiones relacionadas