34 - Estructura de datos tipo diccionario

Hasta ahora hemos presentado dos estructuras fundamentales de datos en Python: listas y tuplas. Ahora presentaremos y comenzaremos a utilizar la estructura de datos tipo diccionario.

La estructura de datos tipo diccionario utiliza una clave para acceder a un valor. El subíndice puede ser un entero, un float, un string, una tupla etc. (en general cualquier tipo de dato inmutable)

Podemos relacionarlo con conceptos que conocemos:

  • Un diccionario tradicional que conocemos podemos utilizar un diccionario de Python para representarlo. La clave sería la palabra y el valor sería la definición de dicha palabra.
  • Una agenda personal también la podemos representar como un diccionario. La fecha sería la clave y las actividades de dicha fecha sería el valor.
  • Un conjunto de usuarios de un sitio web podemos almacenarlo en un diccionario. El nombre de usuario sería la clave y como valor podríamos almacenar su mail, clave, fechas de login etc.

Hay muchos problemas de la realidad que se pueden representar mediante un diccionario de Python.

Recordemos que las listas son mutables y las tuplas inmutables. Un diccionario es una estructura de datos mutable es decir podemos agregar elementos, modificar y borrar.

Definición de un diccionario por asignación.

productos={"manzanas":39, "peras":32, "lechuga":17}
print(productos)

Como vemos debemos encerrar entre llaves los elementos separados por coma. A cada elementos debemos indicar del lado izquierdo del caracter : la clave y al lado derecho el valor asignado para dicha clave. Por ejemplo para la clave "peras" tenemos asociado el valor entero 32.

definición por asignación de diccionario en Python

Problema 1:

En el bloque principal del programa definir un diccionario que almacene los nombres de paises como clave y como valor la cantidad de habitantes. Implementar una función para mostrar cada clave y valor.

Programa: ejercicio159.py

Ver video

def imprimir(paises):
    for clave in paises:
        print(clave, paises[clave])


# bloque principal

paises={"argentina":40000000, "españa":46000000, "brasil":190000000, "uruguay": 3400000}
imprimir(paises)

En el bloque principal de nuestro programa inicializamos un diccionario con cuatro elementos y lo pasamos a la función imprimir:

paises={"argentina":40000000, "españa":46000000, "brasil":190000000, "uruguay": 3400000}
imprimir(paises)

Mediante el ciclo repetitivo for podemos acceder sucesivamente a las claves almacenadas en el diccionario y luego conociendo la clave podemos acceder al valor de forma similar a las listas indicando como subíndice la clave:

def imprimir(paises):
    for clave in paises:
        print(clave, paises[clave])

Problema 2:

Crear un diccionario que permita almacenar 5 artículos, utilizar como clave el nombre de productos y como valor el precio del mismo.
Desarrollar además las funciones de:
1) Imprimir en forma completa el diccionario
2) Imprimir solo los artículos con precio superior a 100.

Programa: ejercicio160.py

Ver video

def cargar():
    productos={}
    for x in range(5):
        nombre=input("Ingrese el nombre del producto:")
        precio=int(input("Ingrese el precio:"))
        productos[nombre]=precio
    return productos


def imprimir(productos):
    print("Listado de todos los articulos")
    for nombre in productos:
        print(nombre, productos[nombre])


def imprimir_mayor100(productos):
    print("Listado de articulos con precios mayores a 100")
    for nombre in productos:
        if productos[nombre]>100:
            print(nombre)

            
# bloque principal

productos=cargar()
imprimir(productos)
imprimir_mayor100(productos)

Para agregar elementos a un diccionario procedemos a asignar el valor e indicamos como subíndice la clave:

        nombre=input("Ingrese el nombre del producto:")
        precio=int(input("Ingrese el precio:"))
        productos[nombre]=precio

Si ya existe el nombre de producto en el diccionario se modifica el valor para esa clave.

Operador in con diccionarios

Para consultar si una clave se encuentra en el diccionario podemos utilizar el operador in:

if clave in diccionario:
    print(diccionario[clave])

Esto muy conveniente hacerlo ya que si no existe la clave produce un error al tratar de accederlo:

print(diccionario[clave])

Problema 3:

Desarrollar una aplicación que nos permita crear un diccionario ingles/castellano. La clave es la palabra en ingles y el valor es la palabra en castellano.
Crear las siguientes funciones:
1) Cargar el diccionario.
2) Listado completo del diccionario.
3) Ingresar por teclado una palabra en ingles y si existe en el diccionario mostrar su traducción.

Programa: ejercicio161.py

Ver video

def cargar():
    diccionario={}
    continua="s"
    while continua=="s":
        caste=input("Ingrese palabra en castellano:")
        ing=input("Ingrese palabra en ingles:")
        diccionario[ing]=caste
        continua=input("Quiere cargar otra palabra:[s/n]")
    return diccionario


def imprimir(diccionario):
    print("Listado completo del diccionario")
    for ingles in diccionario:
        print(ingles,diccionario[ingles])


def consulta_palabra(diccionario):
    pal=input("Ingrese la palabra en ingles a consultar:")
    if pal in diccionario:
        print("En castellano significa:",diccionario[pal])


# bloque principal

diccionario=cargar()
imprimir(diccionario)
consulta_palabra(diccionario)

La función de cargar crea el diccionario y va solicitando la palabra en castellano y su traducción. Luego de agregar un elementos se solicita el ingrese de una variable string pidiendo que confirme si quiere cargar otra palabra en el diccionario o finalizar:

def cargar():
    diccionario={}
    continua="s"
    while continua=="s":
        caste=input("Ingrese palabra en castellano:")
        ing=input("Ingrese palabra en ingles:")
        diccionario[ing]=caste
        continua=input("Quiere cargar otra palabra:[s/n]")
    return diccionario

La función imprimir muestra el diccionario en forma completa:

def imprimir(diccionario):
    print("Listado completo del diccionario")
    for ingles in diccionario:
        print(ingles,diccionario[ingles])

Lo nuevo aparece cuando queremos consultar la traducción de una palabra.
Se solicita al operador que ingrese la palabra en ingles que desconoce y mediante el operador in verificamos si dicha palabra se encuentra dentro del diccionario, en caso afirmativo procedemos a mostrar el valor del diccionario, es decir la palabra en castellano:

def consulta_palabra(diccionario):
    pal=input("Ingrese la palabra en ingles a consultar:")
    if pal in diccionario:
        print("En castellano significa:",diccionario[pal])

Problema propuesto

  • Crear un diccionario en Python que defina como clave el número de documento de una persona y como valor un string con su nombre.
    Desarrollar las siguientes funciones:
    1) Cargar por teclado los datos de 4 personas.
    2) Listado completo del diccionario.
    3) Consulta del nombre de una persona ingresando su número de documento.

    Ver video

Solución
ejercicio162.py

def cargar():
    personas={}
    for x in range(4):
        numero=int(input("Ingrese el numero de documento:"))
        nombre=input("Ingrese el nombre:")
        personas[numero]=nombre
    return personas


def imprimir(personas):
    print("Listado del diccionario completo")
    for numero in personas:
        print(numero, personas[numero])


def consulta_por_numero(personas):
    nro=int(input("Ingrese el numero de documento a consultar:"))
    if nro in personas:
        print("Nombre de la persona:",personas[nro])
    else:
        print("No existe una persona con dicho numero de documento")


# bloque principal

personas=cargar()
imprimir(personas)
consulta_por_numero(personas)