2.9. Diccionarios¶
Un diccionario es una correspondencia de claves a valores. Cada clave se busca directamente; el diccionario recuerda qué valor se asoció por última vez con esa clave.
2.9.1. Crear diccionarios¶
Usa llaves con pares key: value, o el constructor dict:
empty = {}
person = {"name": "OpenMV", "id": 42}
counts = dict(a=1, b=2, c=3) # keyword form
pairs = dict([("x", 1), ("y", 2)]) # from a list of pairs
Los valores pueden ser de cualquier tipo: cadenas, números, listas e incluso otros diccionarios:
config = {
"name": "OpenMV",
"id": 42,
"width": 320,
"tags": ["red", "round"],
}
Cada clave de un diccionario se corresponde con exactamente un valor.¶
2.9.2. Acceso y pertenencia¶
Indexar con [] recupera el valor de una clave. Una clave inexistente lanza KeyError:
>>> person = {"name": "OpenMV", "id": 42}
>>> person["name"]
'OpenMV'
>>> person["missing"]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'missing'
Para una búsqueda tolerante, usa dict.get(). Devuelve None para una clave inexistente, o un valor que pases como segundo argumento:
>>> person.get("name")
'OpenMV'
>>> person.get("missing") # returns None
>>> person.get("missing", "n/a")
'n/a'
La palabra clave in comprueba la pertenencia de una clave, no de un valor:
>>> "name" in person
True
>>> "OpenMV" in person
False
2.9.3. Añadir, actualizar y eliminar¶
Asignar a d[key] añade la entrada si la clave es nueva y la sobrescribe si ya existe:
>>> person["seen"] = 1
>>> person["seen"] = 2 # overwrites
>>> person
{'name': 'OpenMV', 'id': 42, 'seen': 2}
La eliminación tiene varias formas:
del d[key]– elimina una entrada; lanzaKeyErrorsi la clave no existe.dict.pop()– elimina y devuelve el valor; un valor por defecto opcional te permite evitar la excepción.dict.clear()– elimina todas las entradas.
dict.update() fusiona otro diccionario (o una lista de pares (key, value)) en el receptor, sobrescribiendo cualquier clave coincidente:
>>> person.update({"id": 100, "owner": "alice"})
>>> person
{'name': 'OpenMV', 'id': 100, 'seen': 2, 'owner': 'alice'}
2.9.4. Iterar¶
Iterar directamente sobre un diccionario produce sus claves, en orden de inserción:
for k in person:
print(k)
Tres vistas dan acceso explícito:
dict.keys()– las claves (igual que iterar sobre el diccionario).dict.values()– los valores.dict.items()– tuplas(key, value), ideales para desempaquetar en un bucle.
for key, value in person.items():
print(key, "=", value)
2.9.5. Qué puede ser una clave¶
Las claves de un diccionario deben ser hashables: su valor no puede cambiar durante su vida útil. Los tipos hashables comunes son:
Los tipos mutables como list, dict y bytearray no pueden ser claves; usar uno lanza TypeError. Las tuplas de valores inmutables son la forma estándar de indexar un diccionario por un identificador compuesto, como una coordenada de cuadrícula bidimensional:
>>> grid = {}
>>> grid[(0, 0)] = "start"
>>> grid[(5, 7)] = "end"
2.9.6. Longitud¶
len() devuelve el número de entradas:
>>> len(person)
4