IWI-131 Programación¶
Diccionarios¶
Un diccionario es una colección no ordenada que permite asociar llaves con valores. Utilizando la llave siempre es posible recuperar, de manera eficiente, el valor asociado.
- El funcionamiento de diccionarios es similar a cuando se recupera un elemento de una lista usando su índice:
L[i]
- En este caso el índice de la lista es una ''llave'' y el elemento recuperado es el ''valor''
L = [1, 3, 4, 2, 4]
#imprimiendo el elemento del indice 3 de la lista L
print(L[3])
- En diccionarios, las llaves pueden ser: números (int o float), strings o listas.
- Las llaves en un diccionario deben ser únicas, es decir, una llave no puede aparecer dos veces.
#diccionario de telefonos
#llaves: nombres de personas (string)
#valores: numeros de telefono asociados a cada nombre (int)
telefonos = {'Jaimito':5551428, 'Yayita': 5550012, 'Pepito':5552437}
#mostrar por pantalla el telefono de Pepito
print(telefonos['Pepito'])
Creación de Diccionarios¶
Un diccionario vacío puede ser creado por medio de la función dict()
y con el paréntesis de llave {}
.
dicc1 = {}
dicc2 = dict()
print(dicc1)
print(dicc2)
Un diccionario con elementos, consiste de pares llave-valor.
- El diccionario está delimitado por paréntesis de llave
{ }
. - Cada par llave-valor se separa del resto con coma
,
. - Cada llave se separa de su valor utilizando el caracter dos puntos
:
.
Considerar el siguiente diccionario que relaciona animales (llaves) con la cantidad de patas que tienen (valores).
patas = {'humano': 2, 'pulpo': 8, 'perro': 4, 'gato': 4}
Manipulación de Diccionarios¶
Agregar/Modificar un elemento¶
Se debe hacer una asignación del diccionario con una llave igual a un valor.
- Si la llave utilizada no existe en el diccionario, se agrega un nuevo elemento.
- Si la llave utilizada existe en el diccionario, el valor asociado es modificado.
patas = {'humano': 2, 'pulpo': 8, 'perro': 5, 'gato': 4}
print("Diccionario antes de agregar un valor")
print(patas)
patas['cienpies'] = 100
print("Diccionario despues de agregar un valor")
print(patas)
#los perros en realidad tienen cuatro patas, cambiar valor en el diccionario
patas["perro"] = 4
print("Diccionario despues de cambiar un valor")
print(patas)
Eliminar un elemento¶
Usando la instrucción del
se puede eliminar un elemento del diccionario. Se debe indicar la llave del elemento que se quiere eliminar.
patas = {'cienpies': 100, 'humano': 2, 'gato': 4, 'pulpo': 8, 'perro': 4}
print("Diccionario antes de eliminar un elemento")
print(patas)
#eliminando el elemento del diccionario
del patas["pulpo"]
print("Diccionario despues de eliminar un elemento")
print(patas)
Al igual que en listas, al intentar eliminar un elemento que no existe (porque no existe la llave en el diccionario) ocurre un error.
patas = {'cienpies': 100, 'humano': 2, 'gato': 4, 'pulpo': 8, 'perro': 4}
#intentando eliminar un elemento en el diccionario
del patas["oso"]
Acceder a elementos de un diccionario¶
El valor asociado a la llave k
del diccionario d
se puede obtener como d[k]
:
patas = {'cienpies': 100, 'humano': 2, 'gato': 4, 'pulpo': 8, 'perro': 4}
#accediendo y mostrando por pantalla la cantidad de patas de un gato
print("El gato tiene",patas['gato'],"patas")
#intentando mostrar las patas que tiene un oso
print("El oso tiene",patas['oso'],"patas")
Funciones sobre Diccionarios¶
Cantidad de elementos¶
La función len
permite saber la cantidad de elementos del diccionario, es decir, la cantidad de pares llave-valor.
patas = {'cienpies': 100, 'humano': 2, 'gato': 4, 'pulpo': 8, 'perro': 4}
print(len(patas))
Comprobar si una llave está en el diccionario¶
La instrucción in
verifica si una llave está en el diccionario.
patas = {'cienpies': 100, 'humano': 2, 'gato': 4, 'pulpo': 8, 'perro': 4}
print('pulpo' in patas)
print(8 in patas)
Iteración sobre diccionarios¶
Se pueden utilizar ciclos for
para iterar sobre diccionarios. En este caso estaremos iterando sobre las llaves del diccionario. Como el diccionario no tiene orden particular, lo único que sabemos es que se iterará sobre todas las llaves.
Considere el diccionario capitales
, donde las llaves corresponden a países y los valores son las capitales respectivas de cada país.
capitales = {'Chile': 'Santiago', 'Peru': 'Lima', 'Ecuador': 'Quito'}
for pa in capitales:
#que esta imprimiendo en cada iteracion del ciclo?
print("pa =",pa)
capitales = {'Chile': 'Santiago', 'Peru': 'Lima', 'Ecuador': 'Quito'}
for pais in capitales:
#que se esta imprimiendo en cada iteracion del ciclo?
print("La capital de",pais,"es",capitales[pais])
Sintaxis genérica:
for var in diccio:
a = funcion(var)
- La variable
var
está accediento implícitamente a cada llave del diccionariodiccio
. - Recordar que, teniendo la llave, es posible acceder al valor asociado mediante
diccio[var]
.
Ejercicios¶
1. Escriba la función contar_letras(palabra)
que reciba un string y retorne un diccionario que indique cuántas veces aparece cada letra en dicho string.
>>> contar_letras('entretener')
{'e': 4, 'n': 2, 'r': 2, 't': 2}
>>> contar_letras('lapiz')
{'a': 1, 'i': 1, 'l': 1, 'p': 1, 'z': 1}
def contar_letras(palabra):
d = dict()
for letra in palabra:
if letra not in d:
d[letra] = 0
d[letra] += 1
return d
diccio = contar_letras("entretener")
print(diccio)
2. Considere la siguente lista de strings palabras
.
lista_palabras = ["el", "jardin", "la", "casa", "mi", "el", "la", ...]
Con el objetivo de construir una nube de palabras, se requiere de una función contar_palabras(lista)
que, dada una lista de palabras lista
, retorne una lista de listas, donde la primera componente sea una palabra y la segunda la cantidad de veces que paraece dicha palabra en la lista.
>>> contar_palabras(lista)
[['mi', 1], ['casa', 1], ['jardin', 1], ['el', 2], ['la', 2], ...]
def contar_palabras(lista):
d = {}
for p in lista:
if p not in d:
d[p] = 0
d[p]+=1
lista = list()
for pa in d:
lista.append([pa,d[pa]])
return lista
lista_palabras = ["el", "jardin", "la", "casa", "mi", "el", "la"]
print(contar_palabras(lista_palabras))
3. Considere la lista de listas viajes
, donde cada sublista agrupa el nombre de una persona y una ciudad donde esa persona ha viajado:
viajes = [["Juan", "Santiago"], ["Pedro", "Coquimbo"], ["Juan", "Valparaiso"], ["Diego", "Talcahuano"], ...]
Escriba la función ciudades_visitadas(viajes)
que reciba una lista como la mostrada en viajes
. Esta función debe retornar un diccionario, cuyas llave corresponde al nombre de una persona y el valor es una lista con todas las ciudades que ha visitado esa persona.
>>> ciudades_visitadas(viajes)
{'Diego': ['Talcahuano'], 'Pedro': ['Coquimbo'], 'Juan': ['Santiago', 'Valparaiso'], ...}
def ciudades_visitadas(viajes):
d = dict()
for viaje in viajes:
persona = viaje[0]
ciudad = viaje[1]
if persona not in d:
d[persona] = list()
d[persona].append(ciudad)
return d
v = [["Juan", "Santiago"], ["Pedro", "Coquimbo"], ["Juan", "Valparaiso"], ["Diego", "Talcahuano"]]
print(ciudades_visitadas(v))