Soluciones ejercicios diccionario

votaciones = [
    {
        "votante": "Juan",
        "votos": [
            {"participante": "Ana", "puntos": 5},
            {"participante": "Pedro", "puntos": 3}
        ]
    },
    {
        "votante": "Marta",
        "votos": [
            {"participante": "Ana", "puntos": 4},
            {"participante": "Luis", "puntos": 2}
        ]
    },
    {
        "votante": "Pedro",
        "votos": [
            {"participante": "Ana", "puntos": 3},
            {"participante": "Luis", "puntos": 5}
        ]
    }
]


# crear una función que nos devuelva una lista de participantes ordenada de
# más votos a menos votos

# para cada participante el número de votos que tiene
# ¿Puedo imprimir cada participante con su voto?
# Lo tengo que guardar en alguna parte: en un diccionario
def listaVotosRedundante(votaciones):
    resultado = {}
    for votacion in votaciones:
        # print(votacion["votos"])
        for voto in votacion["votos"]:
            resultado[voto["participante"]] = 0

    print(resultado)
    for votacion in votaciones:
        # print(votacion["votos"])
        for voto in votacion["votos"]:
            resultado[voto["participante"]] += voto["puntos"]
    print(resultado)
    return sorted(resultado,key=resultado.get,reverse=True)


def listaVotos(votaciones):
    # Guardo los datos en un diccionario
    resultado = {}
    # recorro las votaciones
    for votacion in votaciones:
        # Dentro de las votaciones recorro los votos
        for voto in votacion["votos"]:
            # Si el participante ya lo tengo en el diccionario sumo los puntos
            if voto["participante"] in resultado:
                resultado[voto["participante"]] += voto["puntos"]
            else:
                # Si no está lo creo con los puntos de esta votación
                # No puedo sumar los puntos si no existe de antes
                resultado[voto["participante"]] = voto["puntos"]

    # Ordeno las claves del diccionario (que son los participantes) por su valor (que son los votos)
    return sorted(resultado, key=resultado.get, reverse=True)


print(listaVotos(votaciones))

# Crear una función que nos devuelva un diccionario con
# la clave el nombre del votante y el valor la media de sus votos
# recorrer todos los votantes

def mediaVotos(votaciones):
    votantes={}
    # al final de lo que ponga aquí en mi diccionario tendré
    # el nombre de los votantes y de momento ponemos 0
    for votacion in votaciones:
        suma=0
        # Sumo todos sus puntos
        for voto in votacion["votos"]:
            suma+=voto["puntos"]
            # la media es la suma divido entre el número de votos
        votantes[votacion["votante"]] = suma/len(votacion["votos"])
    return votantes

print(mediaVotos(votaciones))

Publicado por

Juan Pablo Fuentes

Formador de programación y bases de datos