valor una saber los esta elementos ejemplo dict diccionario crear contar consultar como clave agregar acceder python python-2.7 python-3.x dictionary

saber - Python dict cómo crear una clave o anexar un elemento a la clave?



diccionario python ejemplo (4)

Soy nuevo en Python. No solo estoy aprendiendo sus funciones, tipos y demás, sino que también estoy tratando de aprender las formas Ptónicas de hacer las cosas y de ahí mi pregunta:

Tengo un diccionario vacío. Nombre: dict_x Es tener claves cuyos valores son listas.

A partir de una iteración separada, key_123 una clave (por ejemplo, key_123 ) y un elemento (una tupla) para colocarla en la lista del valor de key_123 .

Si esta clave ya existe, quiero agregar este artículo. Si esta clave no existe, quiero crearla con una lista vacía y luego anexarla o simplemente crearla con una tupla.

En el futuro, cuando vuelva a aparecer esta clave, ya que existe, quiero que el valor se anexe nuevamente.

Mi código consiste en esto:

Obtener clave y valor.

Ver si la tecla NOT existe en dict_x .

y si no lo creas: dict_x[key] == []

Después: dict_x[key].append(value)

¿Es esta la manera de hacerlo? ¿Debo tratar de usar try/except blocks?


Aquí hay varias formas de hacerlo para que pueda comparar cómo se ve y elegir lo que le gusta. Los ordené de una manera que creo que es más "pitónica" , y comenté los pros y contras que pueden no ser obvios a primera vista:

Usando collections.defaultdict :

import collections dict_x = collections.defaultdict(list) ... dict_x[key].append(value)

Pros: Probablemente el mejor rendimiento. Contras: No disponible en Python 2.4.x.

Usando dict().setdefault() :

dict_x = {} ... dict_x.setdefault(key, []).append(value)

Contras: creación ineficiente de list() no utilizada list() s.

Usando try ... except :

dict_x = {} ... try: values = dict_x[key] except KeyError: values = dict_x[key] = [] values.append(value)

O:

try: dict_x[key].append(value) except KeyError: dict_x[key] = [value]


Puede usar defaultdict en collections .

Un ejemplo de doc:

s = [(''yellow'', 1), (''blue'', 2), (''yellow'', 3), (''blue'', 4), (''red'', 1)] d = defaultdict(list) for k, v in s: d[k].append(v)


Puedes usar un defaultdict para esto.

d = defaultdict(list) d[''key''].append(''mykey'')

Esto es un poco más eficiente que setdefault ya que no terminas creando listas nuevas que no terminas usando. Cada llamada a setdefault va a crear una nueva lista, incluso si el elemento ya existe en el diccionario.


Use dict.setdefault() :

dic.setdefault(key,[]).append(value)

ayuda (dict.setdefault) :

setdefault(...) D.setdefault(k[,d]) -> D.get(k,d), also set D[k]=d if k not in D