Última actualización: Noviembre 2024
Los diccionarios en Python son fundamentales porque nos permiten almacenar y gestionar datos de manera eficiente mediante pares clave-valor. A diferencia de las listas, que están indexadas por posición, los diccionarios permiten acceder a los datos de manera directa utilizando claves descriptivas, lo que mejora la legibilidad y el mantenimiento del código. Además, tienen una correspondencia directa con el formato json que usaremos habitualmente.
Los diccionarios se representan entre llaves { } , almacenando las parejas clave-valor separadas por comas. Para definir cada pareja, primero se indica la clave entre comillas (simples o dobles), seguida de dos puntos y el valor que se asocia a la clave.
diccionario={"id_Cliente":1,"nombre":"Juan","Apelllidos":"Garcia Perez",
"eda":37,"dirección":"Calle Rue del Percebe, nº4"}
print(type(diccionario))
Si ejecutamos el programa comprobamos que nuestra colección es del tipo diccionario:
<class 'dict'>
Los valores del diccionario pueden ser diferentes tipos de objetos (cadenas, números, colecciones..).
Acceder a los valores de un diccionario
Los corchetes sirven para acceder a un valor del diccionario mediante la clave.
cliente_1={"id_Cliente":1,"nombre":"Juan","Apelllidos":"Garcia Perez",
"eda":37,"dirección":"Calle Rue del Percebe, nº4"}
nombre=cliente_1["nombre"]
print(nombre)
Resultado:
Juan
Modificar valores de un diccionario
Los diccionarios son mutables y puedo modificar el valor de una clave, accediendo a través de la citada clave:
cliente_1={"id_Cliente":1,"nombre":"Juan","Apelllidos":"Garcia Perez",
"eda":37,"dirección":"Calle Rue del Percebe, nº4"}
cliente_1["nombre"]="Antonio"
nombre=cliente_1["nombre"]
print(nombre)
Resultado:
Antonio
Añadir elementos a un diccionario
En un diccionario ya existente podemos añadir un nuevo elemento (“clave”:valor), sencillamente dándole un valor a la nueva clave
cliente_1={"id_Cliente":1,"nombre":"Juan","Apelllidos":"Garcia Perez",
"eda":37,"dirección":"Calle Rue del Percebe, nº4"}
cliente_1["tfno"]=620185477
print(cliente_1)
Resultado:
{'id_Cliente': 1, 'nombre': 'Juan', 'Apelllidos': 'Garcia Perez', 'eda': 37, 'dirección': 'Calle Rue del Percebe, nº4', 'tfno': 620185477}
Para cambiar un valor de un diccionario y para añadir un par “clave”:valor, la sintaxis es prácticamente la misma. Únicamente se añade el par si la clave no existe.
Podemos empezar con un diccionario vacío e ir añadiendo elementos. Para definir un diccionario vacío no incluimos ningún elemento: diccionario={ }
cliente_2={}
cliente_2["id_Cliente"]=2
cliente_2["nombre"]="Veronica"
cliente_2["apellidos"]="Martinez Pelaez"
print(cliente_2)
Resultado:
{'id_Cliente': 2, 'nombre': 'Veronica', 'apellidos': 'Martinez Pelaez'}
Eliminar elementos de un diccionario
Podemos eliminar una pareja “clave”:valor con la instrucción del. Indicando la clave
cliente_1={"id_Cliente":1,"nombre":"Juan","Apelllidos":"Garcia Perez",
"eda":37,"dirección":"Calle Rue del Percebe, nº4"}
del cliente_1["dirección"]
print(cliente_1)
Resultado:
{'id_Cliente': 1, 'nombre': 'Juan', 'Apelllidos': 'Garcia Perez', 'eda': 37}
Recorrer diccionarios
Podemos recorrer los diccionarios de distintas maneras, empleando las claves, los valores o los elementos.
- keys( ): método empleado para recorrer el diccionario empleando las claves
cliente_1={"id_Cliente":1,"nombre":"Juan","Apelllidos":"Garcia Perez","eda":37,
"dirección":"Calle Rue del Percebe, nº4",'tfno': 620185477}
for clave in cliente_1.keys():
print(f"para la clave: {clave}, tenemos el valor: {cliente_1[clave]}")
Resultado:
para la clave: id_Cliente, tenemos el valor: 1
para la clave: nombre, tenemos el valor: Juan
para la clave: Apelllidos, tenemos el valor: Garcia Perez
para la clave: eda, tenemos el valor: 37
para la clave: dirección, tenemos el valor: Calle Rue del Percebe, nº4
para la clave: tfno, tenemos el valor: 620185477
- values( ): método empleado para recorrer el diccionario por los valores
cliente_1={"id_Cliente":1,"nombre":"Juan","Apelllidos":"Garcia Perez","eda":37,
"dirección":"Calle Rue del Percebe, nº4",'tfno': 620185477}
for valor in cliente_1.values():
print(f"el valor es: {valor}")
Resultado:
el valor es: 1
el valor es: Juan
el valor es: Garcia Perez
el valor es: 37
el valor es: Calle Rue del Percebe, nº4
el valor es: 620185477
items( ): con este método, podemos recorrer el diccionario elemento a elemento, recuperando la clave y el valor
cliente_1={"id_Cliente":1,"nombre":"Juan","Apelllidos":"Garcia Perez","eda":37,
"dirección":"Calle Rue del Percebe, nº4",'tfno': 620185477}
for clave,valor in cliente_1.items():
print(f"para la clave: {clave}, tenemos el valor: {valor}")
Resultado:
para la clave: id_Cliente, tenemos el valor: 1
para la clave: nombre, tenemos el valor: Juan
para la clave: Apelllidos, tenemos el valor: Garcia Perez
para la clave: eda, tenemos el valor: 37
para la clave: dirección, tenemos el valor: Calle Rue del Percebe, nº4
para la clave: tfno, tenemos el valor: 620185477
Métodos asociados a los diccionarios
Los diccionarios tienen métodos asociados. En este apartado veremos algunos ejemplos de los más empleado:
- get( ): Tiene dos argumentos: el primero obligatorio y el segundo opcional. El primero es la clave y el segundo el valor que se devuelve en el caso de que no exista la clave.
Si intentamos acceder a un elemento del diccionario a través de una clave que no existe, obtendremos un error:
cliente_1={"id_Cliente":1,"nombre":"Juan","Apelllidos":"Garcia Perez","eda":37,
"dirección":"Calle Rue del Percebe, nº4",'tfno': 620185477}
telefono=cliente_1["telefono"]
Resultado:
telefono=cliente_1["telefono"]
KeyError: 'telefono'
Podemos emplear la función get(), y en el caso de que no exista la clave evitamos que se produzca un error. En el caso de que no empleáramos el segundo argumento opcional:
cliente_1={"id_Cliente":1,"nombre":"Juan","Apelllidos":"Garcia Perez","eda":37,
"dirección":"Calle Rue del Percebe, nº4",'tfno': 620185477}
telefono=cliente_1.get("telefono")
print(telefono)
Resultado:
None
Y empleando el segundo argumento, obtendríamos ese argumento como valor cuando no exista la clave:
cliente_1={"id_Cliente":1,"nombre":"Juan","Apelllidos":"Garcia Perez","eda":37,
"dirección":"Calle Rue del Percebe, nº4",'tfno': 620185477}
telefono=cliente_1.get("telefono","Clave no encontrada")
print(telefono)
Resultado:
Clave no encontrada
- pop( ): Elimina la clave del diccionario pero devuelve el valor
cliente_1={"id_Cliente":1,"nombre":"Juan","Apelllidos":"Garcia Perez","eda":37,
"dirección":"Calle Rue del Percebe, nº4",'tfno': 620185477}
telefono=cliente_1.pop("tfno")
print(telefono)
print(cliente_1)
Resultado:
620185477
{'id_Cliente': 1, 'nombre': 'Juan', 'Apelllidos': 'Garcia Perez', 'eda': 37, 'dirección': 'Calle Rue del Percebe, nº4'}
- keys( ): Recupera las claves del diccionario en una colección:
- values( ): Recupera las claves del diccionario en una colección:
- items( ): Recupera las claves y valores del diccionario en una colección:
cliente_1={"id_Cliente":1,"nombre":"Juan","Apelllidos":"Garcia Perez","edad":37,
"dirección":"Calle Rue del Percebe, nº4",'tfno': 620185477}
print("---------------------------------CLAVES-------------------------")
claves=cliente_1.keys()
print(type(claves))
print(claves)
print("---------------------------------VALORES-----------------------")
valores=cliente_1.values()
print(type(valores))
print(valores)
print("-------------------------------ELEMENTOS--------------------------")
elementos=cliente_1.items()
print(type(elementos))
print(elementos)
Resultado:
---------------------------------CLAVES-------------------------
<class 'dict_keys'>
dict_keys(['id_Cliente', 'nombre', 'Apelllidos', 'edad', 'dirección', 'tfno'])
---------------------------------VALORES-----------------------
<class 'dict_values'>
dict_values([1, 'Juan', 'Garcia Perez', 37, 'Calle Rue del Percebe, nº4', 620185477])
-------------------------------ELEMENTOS--------------------------
<class 'dict_items'>
dict_items([('id_Cliente', 1), ('nombre', 'Juan'), ('Apelllidos', 'Garcia Perez'), ('edad', 37), ('dirección', 'Calle Rue del Percebe, nº4'), ('tfno', 620185477)])
Anidación de diccionarios
Podemos incluir diccionarios en diccionarios, o lo que es lo mismo, un diccionario puede ser un elemento de otro diccionario. En el ejemplo de diccionario de cliente que vengo usando podríamos agrupar nombre y apellidos en un diccionario, ya que normalmente usaremos sus valores juntos. Además, también tendría sentido usar un diccionario para los distintos medios de contacto que tenemos con el cliente.
cliente_1={"id_Cliente":1,
"nomCompleto":{"nombre":"Juan","Apelllidos":"Garcia Perez"},
"edad":37,"dirección":"Calle Rue del Percebe, nº4",
"contactos":{'tfno': 620185477,"email":"juangarpe@gmail.com"}}
for clave,valor in cliente_1.items():
print(f"para la clave: {clave}, tenemos el valor: {valor}")
Resultado:
para la clave: id_Cliente, tenemos el valor: 1
para la clave: nomCompleto, tenemos el valor: {'nombre': 'Juan', 'Apelllidos': 'Garcia Perez'}
para la clave: edad, tenemos el valor: 37
para la clave: dirección, tenemos el valor: Calle Rue del Percebe, nº4
para la clave: contactos, tenemos el valor: {'tfno': 620185477, 'email': 'juangarpe@gmail.com'}
Combinación de diccionarios con colecciones
La combinación de los diferentes tipos de variables permite generar diferentes tipos de estructuras de datos. Por ejemplo, listas de diccionarios:
cliente_1={"id_Cliente":1,"nombre":"Juan","Apelllidos":"Garcia Perez",
"edad":37,"dirección":"Calle Rue del Percebe, nº4",'tfno': 620185477}
cliente_2={"id_Cliente":2,"nombre":"Pedro","Apelllidos":"Rodriguez Martinez",
"edad":27,"dirección":"Avenida de Europa, nº4",'tfno': 610281473}
cliente_3={"id_Cliente":3,"nombre":"Fabiola","Apelllidos":"Ruiz Suarez",
"edad":22,"dirección":"Via ancha es Castilla, nº7",'tfno': 720136189}
lista_clientes=[cliente_1,cliente_2,cliente_3]
for cliente in lista_clientes:
print(cliente)
Resultado:
{'id_Cliente': 1, 'nombre': 'Juan', 'Apelllidos': 'Garcia Perez', 'edad': 37, 'dirección': 'Calle Rue del Percebe, nº4', 'tfno': 620185477}
{'id_Cliente': 2, 'nombre': 'Pedro', 'Apelllidos': 'Rodriguez Martinez', 'edad': 27, 'dirección': 'Avenida de Europa, nº4', 'tfno': 610281473}
{'id_Cliente': 3, 'nombre': 'Fabiola', 'Apelllidos': 'Ruiz Suarez', 'edad': 22, 'dirección': 'Via ancha es Castilla, nº7', 'tfno': 720136189}
En estructuras como la anterior, accedemos de forma jerárquica a los elementos. Es decir, primero indicaríamos el elemento de la lista por su índice y luego el elemento del diccionario por su clave
cliente_1={"id_Cliente":1,"nombre":"Juan","Apelllidos":"Garcia Perez",
"edad":37,"dirección":"Calle Rue del Percebe, nº4",'tfno': 620185477}
cliente_2={"id_Cliente":2,"nombre":"Pedro","Apelllidos":"Rodriguez Martinez",
"edad":27,"dirección":"Avenida de Europa, nº4",'tfno': 610281473}
cliente_3={"id_Cliente":3,"nombre":"Fabiola","Apelllidos":"Ruiz Suarez",
"edad":22,"dirección":"Via ancha es Castilla, nº7",'tfno': 720136189}
lista_clientes=[cliente_1,cliente_2,cliente_3]
nombre_client_2=lista_clientes[1]["nombre"]
print(nombre_client_2)
Resultado:
Pedro
Conversión de tipos
Para realizar conversiones de tipos entre colecciones, usamos el mismo procedimiento que con las variables simples. Empleamos funciones de nombre igual al tipo al que queremos convertir. Por ejemplo, para convertir a lista, emplearemos la función list( ).
cliente_1={"id_Cliente":1,"nombre":"Juan","Apelllidos":"Garcia Perez","edad":37,
"dirección":"Calle Rue del Percebe, nº4",'tfno': 620185477}
coleccion=cliente_1.keys()
print(type(coleccion))
print(coleccion)
colec=list(cliente_1.keys())
print(type(colec))
print(colec)
Resultado:
<class 'dict_keys'>
dict_keys(['id_Cliente', 'nombre', 'Apelllidos', 'edad', 'dirección', 'tfno'])
<class 'list'>
['id_Cliente', 'nombre', 'Apelllidos', 'edad', 'dirección', 'tfno']
NOTA:
Este post es parte de la colección “Python”. Puedes ver el índice de esta colección aquí.