Diccionarios
Contents
3.5. Diccionarios#
3.5.1. Presentación de los diccionarios#
Un diccionario es un conjunto de pares clave:valor donde clave es un dato no mutable y valor es cualquier tipo de dato.
diccionario = {clave1:valor1, clave2:valor2,....,clavek:valork}
Un diccionario se define indicando sus elementos clave:valor:
Ejemplos
horario = {'lunes':'11:30', 'martes':'8:30', 'miércoles':'8:30', 'viernes':'11:30'}
El diccionario horario indica a que hora comienzan las clases de CNP.
Podemos definir otro diccionario con información adicional indicando el grupo que tiene clase en el día y la hora indicados. Para ello utilizamos listas como valores:
clases = {'lunes':['11:30','IAL'], 'martes':['8:30','IAG'], 'miércoles':['8:30','IAL'], 'viernes':['11:30','IAG']}
3.5.1.1. Observaciones#
Los elementos están formados por
clave:valor
A cada clave le corresponde un solo valor
Puede definirse un diccionario vacío. Esta expersión asigna un diccionario vacio a la variable
vacio
:vacio = {}
Los elementos van separados por comas
La clave de cada elemento puede se cualquier tipo que sea inmutable
El valor de cada elemento puede ser de cuaquier tipo
Un diccionario es un iterable. La expresión
for u in diccionario:
-> itera sobre el conjunto de claves de diccionariofor u in diccionario.keys()
-> y es equivalente a la anterior
Es una estructura más general que los iterables que ya hemos vistos (cadenas, listas y tuplas). Para los diccionarios:
no hay un orden establecido en la suceción de elementos del diccionario y
se accede a los elementos del diccionario por la clave; no por la posición como en las anteriores estructuras (cadenas, listas y tuplas).
3.5.2. Generar diccionarios con zip
#
Si L1
y L2
son dos iterables de igual longitud, el objeto zip(L1,L2) es un iterable que contiene tuplas
(u1,u2) = (L1[k],L2[k]) con k = 0,1,2,...,len(L1) - 1.
Ejemplo
I = zip('abcdef', list(range(6)))
for u in I:
print(u)
('a', 0)
('b', 1)
('c', 2)
('d', 3)
('e', 4)
('f', 5)
Con el objeto zip podemos definir un diccionario a partir de dos iterables L1, L2 de igual longitud. Los elementos del primer iterable serán las claves y los elementos correspondientes del segundo serán los valores:
nuevo_diccionario = dict(zip(L1,L2))
Ejemplos
letras = dict(zip('abcdef', list(range(6))))
letras
{'a': 0, 'b': 1, 'c': 2, 'd': 3, 'e': 4, 'f': 5}
L1 = ['La Mari', 'La Paqui', 'La Juani']
L2 = [24,26,31]
edad = dict(zip(L1,L2))
edad
{'La Mari': 24, 'La Paqui': 26, 'La Juani': 31}
3.5.3. Funciones y métodos#
Obtener el valor de una clave dada
letras['a']
0
Si la clave no existe de un a error (KeyError
)
letras['S']
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
Input In [9], in <cell line: 1>()
----> 1 letras['S']
KeyError: 'S'
Longitud de un diccionario
len(letras)
6
Añadir elementos a un diccionario
Se pueden añadir nuevos elementos o cambiar los valores de las claves:
diccionario[clave] = valor
Si la clave no está en diccionario, se añade el par clave:valor, si ya está, cambia el valor asociado a clave:
Ejemplo 1
añadir un nuevo par clave:valor
letras['g'] = 6
letras
{'a': 0, 'b': 1, 'c': 2, 'd': 3, 'e': 4, 'f': 5, 'g': 6}
modificar un par clave:valor
letras['a'] = 1
letras
{'a': 1, 'b': 1, 'c': 2, 'd': 3, 'e': 4, 'f': 5, 'g': 6}
Ejemplo 2
En este caso creamos un diccionario vacío y le añadimos elementos:
patas = {}
patas['gallina'] = 2
patas['vaca'] = 4
patas['rana'] = 4
patas['pulpo'] = 8
patas['mosca'] = 6
patas['araña'] = 8
patas['cigala'] = 10
patas
{'gallina': 2,
'vaca': 4,
'rana': 4,
'pulpo': 8,
'mosca': 6,
'araña': 8,
'cigala': 10}
Comprobar las claves
'A' in letras, 'a' in letras
(False, True)
Borrar
del(letras['a'])
letras
{'b': 1, 'c': 2, 'd': 3, 'e': 4, 'f': 5, 'g': 6}
Lista de claves, valores y items de un diccionario
Las claves y los valores
list(letras.keys())
['b', 'c', 'd', 'e', 'f', 'g']
list(letras.values())
[1, 2, 3, 4, 5, 6]
for p in letras.keys():
print(p)
b
c
d
e
f
g
for p in letras:
print(p)
b
c
d
e
f
g
for p in letras.values():
print(p)
1
2
3
4
5
6
Los items
list(letras.items())
[('b', 1), ('c', 2), ('d', 3), ('e', 4), ('f', 5), ('g', 6)]
for item in letras.items():
print(item)
('b', 1)
('c', 2)
('d', 3)
('e', 4)
('f', 5)
('g', 6)
“Ordenar” un diccionario
sorted(letras)
['b', 'c', 'd', 'e', 'f', 'g']
sorted(letras.items())
[('b', 1), ('c', 2), ('d', 3), ('e', 4), ('f', 5), ('g', 6)]
Listado de funciones y métodos para los diccionarios
Función o método |
Resultado |
---|---|
diccionario**[clave]** |
devuelve el valor asociado a clave en diccionario, error si clave no pertenece a diccionario |
len(diccionario) |
cantidad de pares clave:valor del diccionario |
del(diccionario[clave]) |
elimina el par clave:valor del diccionario |
sorted(diccionario) |
devuelve la lista ordenada de las claves |
sorted(diccionario.items()) |
devuelve la lista ordenada de los elementos (como tuplas (clave, valor)) |
diccionario**.keys()** |
devuelve un iterable que contiene las claves del diccionario |
diccionario**.values()** |
devuelve un iterable que contiene los valores del diccionario |
diccionario**.items()** |
devuelve las tuplas (clave,valor) en un iterable |
clave in diccionario |
devuelve True o False según clave esté en diccionario o no |
diccionario**.get(clave)** |
devuelve el valor asociado a clave, None si clave no está en diccionario |
diccionario**.get(clave,otro)** |
devuelve el valor asociado a clave, y otro si clave no está en diccionario |
Uso de .get()
letras
{'b': 1, 'c': 2, 'd': 3, 'e': 4, 'f': 5, 'g': 6}
letras.get('Catia')
letras.get('b', 'no está')
1
letras.get('Catia', 'no está')
'no está'
3.5.4. Ejemplos#
patas['araña']
8
patas['cabra']
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
Input In [31], in <cell line: 1>()
----> 1 patas['cabra']
KeyError: 'cabra'
len(patas)
7
del patas['rana']
patas
{'gallina': 2, 'vaca': 4, 'pulpo': 8, 'mosca': 6, 'araña': 8, 'cigala': 10}
for u in patas.keys():
print(u)
gallina
vaca
pulpo
mosca
araña
cigala
animales = list(patas.keys())
animales.sort()
for u in animales:
print(u)
araña
cigala
gallina
mosca
pulpo
vaca
for u in animales:
print(u, patas[u])
araña 8
cigala 10
gallina 2
mosca 6
pulpo 8
vaca 4
'cuervo' in patas
False
for u in patas.items():
print(u)
('gallina', 2)
('vaca', 4)
('pulpo', 8)
('mosca', 6)
('araña', 8)
('cigala', 10)
for u in patas.items():
print(u[0], u[1])
gallina 2
vaca 4
pulpo 8
mosca 6
araña 8
cigala 10
Lo que hacemos ahora no está relacionado directamente con diccionarios, pero es conveniente saber producir un listado con formato apropiado
for u in animales:
print(u.ljust(10), patas[u])
araña 8
cigala 10
gallina 2
mosca 6
pulpo 8
vaca 4
print('Número de patas por animales')
print()
for u in animales:
print(u.ljust(10), str(patas[u]).rjust(2))
Número de patas por animales
araña 8
cigala 10
gallina 2
mosca 6
pulpo 8
vaca 4
print('Clases de CNP')
print()
dias = list(clases.keys())
for u in dias:
print(u.ljust(9), clases[u][0].rjust(7), ' ' + clases[u][1])
Clases de CNP
lunes 11:30 IAL
martes 8:30 IAG
miércoles 8:30 IAL
viernes 11:30 IAG
def frecuencias(texto):
letras = 'bcdfghjklmnñpqrstvwxyz'
texto.lower()
diccionario = {}
for letra in letras:
frecuencia = 0
for u in texto:
if u == letra:
frecuencia += 1
if frecuencia:
diccionario[letra] = frecuencia
return diccionario
frecuencias('Cuando se elabora el pan, las condiciones atmosféricas influyen en el resultado final')
{'b': 1,
'c': 3,
'd': 3,
'f': 3,
'l': 7,
'm': 1,
'n': 8,
'p': 1,
'r': 3,
's': 6,
't': 2,
'y': 1}
3.5.5. Ejercicios#
Definir el diccionario capitales que contenga al menos cinco paises y sus respectivas capitales, con el formato capitales = {pais1:capital1,……}.
Una vez definido el diccionario, añadirle dos países más que no están en él. Antes de añadirlos, compruebe que realmente no están con el operador in.
Imprime una lista ordenada alfabéticamente de los países y sus capitales
El diccionario notas contiene los nombres de los alumnos de un curso como claves, y como valores las listas de las notas en las tres evaluaciones parciales que se han realizado: notas = {‘Alfaro, Daniel’:[4,3], ‘Estable, Anabel’:[5,6,5], ‘García-Peña, Tomás’:[2,5,6], ‘Julián, Francisco’:[9,9,7],’Ruiz, Hipólito’:[3,7]}
Imprimir una lista de los alumnos matriculados en el curso.
Imprimir una lista de los alumnos que han aprobado todas las evaluaciones.
Imprimir una lista de los alumnos y sus notas medias.
Imprimir una lista de los alumnos que no han participado en alguna evaluación.
La información de las existencias de fruta en una frutería se guarda en el diccionario existencia cuyas claves son las frutas y los valores son las cantidades correspondientes en kilos. Por ejemplo: existencias = {‘pera’:20, ‘manzana’:50, ‘kiwi’:25, ‘nectarina’: 40, ‘naranja’:25, ‘pomelo’:15, ‘limón’:10}. Se llevan también los diccionarios ventas y suministros de estructura similar y que se actualizan al final del día.
Definir la función actualizar(existencias,ventas,suministros) que actualiza los valores de existencias después de las ventas y entradas del día.
Imprimir una lista de las frutas cuya cantidad haya aumentado al final del día.
Definir la función frecuencias(texto) que devuelve un diccionario cuyas claves son las consonantes y los valores son las frecuencias con que cada letra aparecen en texto. A continuación, utiliza la función definida para:
Ddefinir la función consonantes(texto) que imprime una lista de las consonantes que aparecen en texto.
Definir la función mas_frecuente(texto) que devuelve la consonante más frecuente en texto.
Definir la función raras(texto) que devuelve una lista de las consonantes que no aparecen en texto.