Más ejemplos diccionarios anidados

# Así defino un diccionario
libro = {"titulo": "El Quijote", "autor": "Cervantes", "precio": 20}
# así accedo al valor de una clave
print(libro["precio"])
# Así recorro todas las claves
for clave in libro:
    print(clave)
    # los valores de esa clave
    print(libro[clave])
# Puedo tener una lista de diccionarios

biblioteca = [
    {"titulo": "El Quijote", "autor": "Cervantes", "precio": 20},
    {"titulo": "Las olas", "autor": "Virginia Woolf", "precio": 17},
    {"titulo": "Los detectives salvajes", "autor": "Roberto Bolaño", "precio": 23},
    {"titulo": "Tom va a la escuela", "autor": "Rick Sánchez", "precio": 10}
]

# para acceder a un elemento primero accedo a la posición de la lista
print(biblioteca[1])  # {"titulo": "Las olas", "autor": "Virginia Woolf", "precio": 17},
print(biblioteca[1]["autor"])  # "Virginia Woolf"

# Recorrer esa lista de diccionarios
for libro in biblioteca:
    print(libro)

# Quiero ver todos los autores de la biblioteca
for libro in biblioteca:
    print(libro["autor"])

# Puedo hacer cálculos por ejemplo media de precios
suma = 0
for libro in biblioteca:
    suma += libro["precio"]
print(suma / len(biblioteca))

proyecto = [
    {"nombre": "Análisis", "horas": 10, "precio": 60},
    {"nombre": "Desarrollo", "horas": 50, "precio": 50},
    {"nombre": "Implementación", "horas": 5, "precio": 70},
    {"nombre": "Pruebas", "horas": 15, "precio": 40},
]


# función que me calcule el total de importe del proyecto

def totalProyecto(proyecto):
    total = 0
    # recorro las tareas
    for tarea in proyecto:
        # Accedo a las propiedades que me interesan. En este caso horas y precio
        total += tarea["horas"] * tarea["precio"]
    return total


print(totalProyecto(proyecto))

# listas que tienen diccionarios que tienen listas de diccionarios
biblioteca = [
    {"titulo": "El Quijote",
     "autor": {"nombre": "Miguel de Cervantes", "pais": "España"},
     "ediciones": [
         {"editorial": "Alianza", "precio": 15},
         {"editorial": "Cátedra", "precio": 20}
     ]
     },
    {"titulo": "2666",
     "autor": {"nombre": "Roberto Bolaño", "pais": "Chile"},
     "ediciones": [
         {"editorial": "Anagrama", "precio": 30},
         {"editorial": "Alfaguara", "precio": 28}
     ]
     }
]

# Al precio de la primera edición de mi primer libro
print(biblioteca[0]["ediciones"][0]["precio"]) # 15
# Al precio de la segunda edición de mi segundo libro
print(biblioteca[1]["ediciones"][1]["precio"]) # 28

# Si quiero el total de precios de toda la biblioteca
# Tengo que recorrer los libros
# después recorrer las ediciones
# sumar los precios
def sumaPreciosBiblioteca(biblioteca):
    suma=0
    for libro in biblioteca:
        for edicion in libro["ediciones"]:
            suma+=edicion["precio"]
    return suma

print(sumaPreciosBiblioteca(biblioteca))

Publicado por

Juan Pablo Fuentes

Formador de programación y bases de datos