HOWTO · Python
Matriz o lista de diccionarios en Python
Aprende a crear y consultar una lista de diccionarios en Python, añadir nuevos registros y actualizar sus valores.
En esta página
Una lista de Python es el contenedor habitual para reunir diccionarios: cada elemento de la lista puede almacenar un registro de pares clave-valor. Aunque a veces se la denomina matriz de diccionarios, una lista de Python y los tipos de matriz especializados son distintos. A continuación se muestra cómo crear la lista, acceder a sus registros y valores, añadir un registro y actualizar un valor.
Crear una lista de diccionarios en Python
Escribe cada diccionario como un elemento dentro de un literal de lista. Cada literal crea un diccionario independiente, por lo que los registros pueden tener claves distintas o compartir algunas. Usa un nombre descriptivo para la variable, como records; list ya es el nombre de una función integrada de Python.
Ejecuta este ejemplo:
El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.
records = [
{"name": "Ada", "role": "engineer"},
{"name": "Lin", "role": "designer"},
]
print(records)
[{'name': 'Ada', 'role': 'engineer'}, {'name': 'Lin', 'role': 'designer'}]
Acceder a un diccionario y a sus valores mediante el índice y la clave
Los índices de las listas de Python empiezan en 0, así que el índice 1 selecciona el segundo diccionario. Para leer un campo, primero selecciona el diccionario mediante su índice en la lista y luego usa la clave entre corchetes. Las consultas a la lista y al diccionario son dos pasos dentro de una misma expresión.
El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.
records = [
{"name": "Ada", "role": "engineer"},
{"name": "Lin", "role": "designer"},
]
second_record = records[1]
role = records[1]["role"]
print(second_record)
print(role)
{'name': 'Lin', 'role': 'designer'}
designer
Para que la consulta entre corchetes funcione, la clave debe existir en el diccionario seleccionado. Si puede faltar, usa record.get("role") para obtener None de forma predeterminada o indica un valor alternativo, como en record.get("role", "unknown").
Añadir un diccionario a una lista
Llama a append() para agregar un diccionario al final de la lista existente. El método modifica la lista en el lugar; no crea una lista nueva.
El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.
records = [{"name": "Ada", "role": "engineer"}]
records.append({"name": "Lin", "role": "designer"})
print(records)
[{'name': 'Ada', 'role': 'engineer'}, {'name': 'Lin', 'role': 'designer'}]
Actualizar un diccionario de la lista
Selecciona un registro por su índice y luego asigna un valor a una de sus claves. Si la clave aún no existe, la asignación la agrega. Por tanto, esta sintaxis sirve tanto para reemplazar el valor de un campo como para añadir uno nuevo.
El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.
records = [{"name": "Ada", "role": "engineer"}]
records[0]["role"] = "lead engineer"
records[0]["team"] = "platform"
print(records)
[{'name': 'Ada', 'role': 'lead engineer', 'team': 'platform'}]
Crear una lista de diccionarios con una comprensión de listas
Una comprensión de listas es concisa cuando todos los registros siguen el mismo patrón. Incluye un literal de diccionario en la expresión para crear un diccionario distinto en cada iteración. Por ejemplo, esto crea cuatro diccionarios independientes con los mismos campos iniciales:
El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.
records = [{"active": True, "score": 0} for _ in range(4)]
print(records)
[{'active': True, 'score': 0}, {'active': True, 'score': 0}, {'active': True, 'score': 0}, {'active': True, 'score': 0}]
Para crear varios diccionarios vacíos, llama a dict() en cada iteración:
records = [dict() for _ in range(3)]
print(records)
[{}, {}, {}]
Una comprensión también puede obtener los valores de los campos a partir de un iterable:
records = [{"id": number, "label": f"item-{number}"} for number in range(3)]
print(records)
[{'id': 0, 'label': 'item-0'}, {'id': 1, 'label': 'item-1'}, {'id': 2, 'label': 'item-2'}]
No multipliques una lista que contiene un único diccionario mutable para crear registros repetidos. Por ejemplo, [{}] * 3 repite las referencias al mismo diccionario, por lo que un cambio en un elemento se refleja en las tres posiciones. En cambio, una comprensión con {} crea un diccionario nuevo en cada iteración.
Crear diccionarios en un bucle
Usa un bucle cuando cada diccionario requiera varios pasos o campos condicionales. Crea un diccionario nuevo dentro de cada iteración y luego añádelo a la lista.
El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.
records = []
for number in range(3):
record = {"id": number, "score": number * 10}
records.append(record)
for record in records:
print(record)
{'id': 0, 'score': 0}
{'id': 1, 'score': 10}
{'id': 2, 'score': 20}
En este ejemplo, cada iteración del bucle crea un registro usando el valor actual de number; append() guarda ese diccionario en la lista antes de que comience la siguiente iteración.
Crear diccionarios con el constructor dict()
El constructor dict() crea un diccionario vacío si no recibe argumentos, o uno con campos indicados como argumentos con nombre. Los nombres de esos argumentos se convierten en claves de cadena:
El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.
blank_record = dict()
person = dict(name="John", age=30, city="New York")
print(blank_record)
print(person)
{}
{'name': 'John', 'age': 30, 'city': 'New York'}
Puedes usar llamadas independientes a dict() para crear diccionarios dentro de una lista:
records = [
dict(name="Ada", role="engineer"),
dict(name="Lin", role="designer"),
]
for record in records:
print(record)
{'name': 'Ada', 'role': 'engineer'}
{'name': 'Lin', 'role': 'designer'}
Las claves de los diccionarios deben ser hashables. Entre ellas se incluyen las cadenas, los números y las tuplas cuyos elementos sean hashables; los tipos mutables, como las listas, no pueden usarse como claves. Cada clave puede aparecer una sola vez en un diccionario. Si se construye un diccionario a partir de pares clave-valor repetidos, el valor posterior sustituye al anterior. En una llamada a dict() con argumentos con nombre, cada argumento debe aparecer una sola vez; si la entrada puede contener claves repetidas, usa un mapeo o una secuencia de pares.