print - python list get
Python: list() como valor predeterminado para el diccionario (1)
El mejor método es utilizar collections.defaultdict
con una list
predeterminada:
from collections import defaultdict
dct = defaultdict(list)
Luego solo usa:
dct[key].append(some_value)
y el diccionario creará una nueva lista para usted si la clave aún no está en la asignación. collections.defaultdict
es una subclase de dict
y, por lo demás, se comporta como un objeto dict
normal.
Cuando se usa un dict
estándar, dict.setdefault()
establece dct[key]
correctamente en tu valor predeterminado, por lo que la versión debería haber funcionado bien. Puedes encadenar esa llamada con .append()
:
>>> dct = {}
>>> dct.setdefault(''foo'', []).append(''bar'') # returns None!
>>> dct
{''foo'': [''bar'']}
Sin embargo, al utilizar dct[key] = dct.get(...).append()
, reemplaza el valor de dct[key]
con la salida de .append()
, que es None
.
Tengo el código de Python que se parece a:
if key in dict:
dict[key].append(some_value)
else:
dict[key] = [some_value]
pero me imagino que debería haber algún método para sortear esta afirmación "si". Lo intenté
dict.setdefault(key, [])
dict[key].append(some_value)
y
dict[key] = dict.get(key, []).append(some_value)
pero ambos se quejan de "TypeError: tipo inestable: ''lista''". ¿Alguna recomendación? ¡Gracias!