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"],
}
Un diccionario mostrado como dos columnas: las claves a la izquierda, los valores a la derecha, con flechas que enlazan cada par.

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; lanza KeyError si 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:

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