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