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