d1 = {'Luis':20, 'Miguel':25, 'Pedro':31, 'Pablo':12}
d2 = dict(Luis=20, Miguel=25, Pedro=31, Pablo=12)
d3 = dict([('Luis', 20),
('Miguel', 25),
('Pedro', 31),
('Pablo', 12)])Apéndice L — Diccionarios.
Objetivo. Describir la estructura de datos dict mediante la exposición de ejemplos.
L.1 Introducción.
Recordemos los cuatro tipos de colecciones que se tienen en Python:
| Tipo | Ordenada | Inmutable | Indexable | Duplicidad |
|---|---|---|---|---|
| List | SI | NO | SI | SI |
| Tuple | SI | SI | SI | SI |
| Sets | NO | NO | NO | NO |
| Dict | NO | NO | SI | NO |
L.2 Diccionarios.
- Consisten en una secuencia NO ordenada y mutable.
- NO permite miembros duplicados.
- Cada elemento de un diccionario contiene una clave y un valor.
- Los elementos de los diccionarios se pueden indexar a través de las claves.
- Los diccionarios se definen usando llaves (
{}) y dos puntos (:) para separar la clave del valor y comas (,) para separar sus elementos.
Creación de los diccionarios:
print(d1)
print(d2)
print(d3){'Luis': 20, 'Miguel': 25, 'Pedro': 31, 'Pablo': 12}
{'Luis': 20, 'Miguel': 25, 'Pedro': 31, 'Pablo': 12}
{'Luis': 20, 'Miguel': 25, 'Pedro': 31, 'Pablo': 12}
Los tres diccionarios son objetos diferentes:
print(type(d1), id(d1))
print(type(d2), id(d2))
print(type(d3), id(d3))<class 'dict'> 2051985577088
<class 'dict'> 2051985576256
<class 'dict'> 2051985576128
L.3 Indexado mediante la clave
Los diccionarios se pueden indexar usando las claves de los elementos, por ejemplo:
print(d1['Luis'])
print(d1['Pedro'])20
31
Se puede modificar un valor de un cierto elemento:
print(d1)
d1['Luis'] = 53
print(d1){'Luis': 20, 'Miguel': 25, 'Pedro': 31, 'Pablo': 12}
{'Luis': 53, 'Miguel': 25, 'Pedro': 31, 'Pablo': 12}
Cuando el elemento con la clave que se proporciona no existe, entonces se agrega un nuevo elemento:
d1['fulano'] = 15
print(d1){'Luis': 53, 'Miguel': 25, 'Pedro': 31, 'Pablo': 12, 'fulano': 15}
L.4 Métodos de los diccionarios.
En términos de Programación Orientada a Objetos, la clase <class 'dict'> define una serie de métodos que se pueden aplicar sobre los objetos del tipo dict. Veamos algunos ejemplos:
L.4.1 Obtener todos los elementos del diccionario.
d1.items() dict_items([('Luis', 53), ('Miguel', 25), ('Pedro', 31), ('Pablo', 12), ('fulano', 15)])
L.4.2 Obtener todas las claves de los elementos del diccionario.
d1.keys() dict_keys(['Luis', 'Miguel', 'Pedro', 'Pablo', 'fulano'])
L.4.3 Obtener todos los valores de los elementos del diccionario.
d1.values() dict_values([53, 25, 31, 12, 15])
L.4.4 Obtener el valor de un elemento:
d1.get('Luis') # Valor del elemento cuya clave es `'Luis'`.53
L.4.5 Agregar un diccionario en otro.
d4 = {'Azul':35, 'Cereza':45}
d1.update(d4) # Agregamos el diccionario d4 al diccionario d1
print(d1){'Luis': 53, 'Miguel': 25, 'Pedro': 31, 'Pablo': 12, 'fulano': 15, 'Azul': 35, 'Cereza': 45}
Si los elementos ya existen, solo se actualizan los valores.
d5 = {'Luis':512, 'fulano':10}
d1.update(d5)
print(d1){'Luis': 512, 'Miguel': 25, 'Pedro': 31, 'Pablo': 12, 'fulano': 10, 'Azul': 35, 'Cereza': 45}
L.4.6 Extraer el último elemento del diccionario.
print(d1.popitem())
print(d1)('Cereza', 45)
{'Luis': 512, 'Miguel': 25, 'Pedro': 31, 'Pablo': 12, 'fulano': 10, 'Azul': 35}
L.4.7 Extraer el elemento de una cierta clave.
print(d1.pop('Miguel')) # Elemento de clave `'Miguel'`.
print(d1)25
{'Luis': 512, 'Pedro': 31, 'Pablo': 12, 'fulano': 10, 'Azul': 35}
L.4.8 Eliminar todos los elementos del diccionario.
print(d1, id(d1)) # Antes de eliminar los elementos
d1.clear() # elimina todos los elementos del diccionario
print(d1, id(d1)) # Después de eliminar los elementos{'Luis': 512, 'Pedro': 31, 'Pablo': 12, 'fulano': 10, 'Azul': 35} 2051985577088
{} 2051985577088
L.5 Operaciones y funciones sobre diccionarios.
- Imprimimos el diccionario
d2.
print(d2){'Luis': 20, 'Miguel': 25, 'Pedro': 31, 'Pablo': 12}
- Es posible usar las características de los diccionarios para imprimir la salida.
# Usando la clave y cadenas formateadas
print(f"Luis:{d2['Luis']}, Miguel:{d2['Miguel']}")Luis:20, Miguel:25
# Usando la clave, el método str.format() y pasando el diccionario como argumento
print("Luis:{d[Luis]}, Miguel:{d[Miguel]}".format(d = d2))Luis:20, Miguel:25
# Una forma más clara y concisa:
print("Luis:{Luis}, Miguel:{Miguel}".format(**d2))Luis:20, Miguel:25
- ¿Existe el elemento
'Miguel'en el diccionario?
'Miguel' in d2True
- ¿Existe el valor
25en los valores del diccionario?
25 in d2.values()True
- ¿Existe la clave
'Luis'en las claves del diccionario?
'Luis' in d2.keys()True
- Algunas funciones comunes:
print(len(d2))
print(max(d2))
print(min(d2))
print(all(d2))
print(any(d2))
print(sorted(d2))
# Suma de los valores del diccionario
print(sum(list(d2.values())))4
Pedro
Luis
True
True
['Luis', 'Miguel', 'Pablo', 'Pedro']
88
- Eliminar el elemento
'Miguel':25
del d2['Miguel']
print(d2){'Luis': 20, 'Pedro': 31, 'Pablo': 12}
L.6 Copiando diccionarios
# Imprimimos el contenido del diccionario
print(d3){'Luis': 20, 'Miguel': 25, 'Pedro': 31, 'Pablo': 12}
L.6.1 Copiando con el método copy()
d3_copia = d3.copy()
print(d3, type(d3), id(d3))
print(d3_copia, type(d3_copia), id(d3_copia)){'Luis': 20, 'Miguel': 25, 'Pedro': 31, 'Pablo': 12} <class 'dict'> 2051985576128
{'Luis': 20, 'Miguel': 25, 'Pedro': 31, 'Pablo': 12} <class 'dict'> 2051985589056
L.6.2 Copiando con la biblioteca copy()
import copy
d3_copia = copy.copy(d3)
print(d3, type(d3), id(d3))
print(d3_copia, type(d3_copia), id(d3_copia)){'Luis': 20, 'Miguel': 25, 'Pedro': 31, 'Pablo': 12} <class 'dict'> 2051985576128
{'Luis': 20, 'Miguel': 25, 'Pedro': 31, 'Pablo': 12} <class 'dict'> 2051985587584