Tengo un diccionario vacio Nombre: dict_x
es tener claves cuyos valores son listas.
De una iteración separada, obtengo una clave (ej .:) key_123y un elemento (una tupla) para colocar en la lista del dict_xvalor de key_123.
Si esta clave ya existe, quiero agregar este elemento. Si esta clave no existe, quiero crearla con una lista vacía y luego agregarla o simplemente crearla con una tupla.
En el futuro, cuando vuelva a aparecer esta clave, ya que existe, quiero que el valor se agregue nuevamente.
Mi código consiste en esto:
Obtenga clave y valor.
Vea si la clave NO 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/exceptbloques?

dict_x[key] = [some_value] if not dict_x.has_key(key) else dict_x[key] + [some_value]pero esta respuesta sugiere una forma mucho mejor. De hecho, se poneset()como argumento y le permite utilizar eladd()método ...Estas son las diversas formas de hacer esto 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 los contras que podrían no ser obvios a primera vista:
Utilizando
collections.defaultdict:Pros: Probablemente el mejor rendimiento. Contras: No disponible en Python 2.4.x.
Utilizando
dict().setdefault():Contras: Creación ineficiente de
list()s no utilizados .Utilizando
try ... except:O:
fuente
.setdefault()crea diccionarios innecesarios. Creo que estoy creandolists innecesarios[]en el segundo argumento de.setdefault()que nunca se usa sikeyya existe. Podría usardict.setdefault()(en beneficio del hashing de claves eficiente), y usar una variable para reutilizarlists no utilizados , pero eso agrega algunas líneas más de código..setdefaultcrea una búsqueda de clave donde la ausencia dedictresultados dará como resultado unKeyErrortiempocollections.defaultdict(list)crea unadictbúsqueda de clave donde la ausencia insertará unlistPuedes usar un defaultdict para esto.
Esto es un poco más eficiente que
setdefaultporque no terminas creando nuevas listas que no terminas usando. Cada llamada asetdefaultva a crear una nueva lista, incluso si el elemento ya existe en el diccionario.fuente
Puedes usar defaultdict en
collections.Un ejemplo de doc:
fuente
fuente
dict.get).