Python: fusionar y agregar diccionarios

CorePress2024-01-24  13

Tengo la tarea de tomar diccionarios de clases con los nombres de los estudiantes y sus calificaciones para cada clase, como se muestra a continuación


History = {"bob": 20, "alex" :80}

Maths = {"harry": 50, "bob" : 90}

english = {"alex" : 40, "lee" : 20}

art = {"lee" : 70, "harry" :40}

y luego colocar las puntuaciones de los estudiantes de cada clase en un diccionario final como se muestra a continuación


Final = {"alex":80,40 , "bob":20,90 , "harry":50,40 , "lee":20,70}

He logrado colocar todas las clases en un diccionario grande, pero no puedo obtener el valor múltiple para cada uno de los nombres de los estudiantes. Lo más cerca que estoy es ponerlos todos los diccionarios en una lista como la siguiente


lst = [{"bob": 20, "alex" :80},{"harry": 50, "bob" : 90},{"alex" : 40, "lee" : 20},{"lee" : 70, "harry" :40}]

después de esto no sé qué hacer. Supongo que de alguna manera recorro cada uno de los pares clave-valor y lo coloco en un diccionario. Luego, si un valor clave está en el nuevo diccionario, de alguna manera agrega el valor a la clave existente, pero parece que no puedo entenderlo. Cualquier ayuda sería excelente

3

esta sintaxis de Python no es válida {"alex":80,40 , "bob":20,90 , "harry":50,40 , "lee":20,70}

- tiro muerto

27/03/2021 a las 11:49



------------------------------------

Puedes usar collections.defaultdict y luego, para cada estudiante, agregar su calificación

result = defaultdict(list)
for subject in History, Maths, english, art:
    for student, grade in subject.items():
        result[student].append(grade)

print(result)  # {'bob': [20, 90], 'alex': [80, 40], 'harry': [50, 40], 'lee': [20, 70]}



------------------------------------

¡Pruébalo online!

History = {"bob": 20, "alex" :80}
Maths = {"harry": 50, "bob" : 90}
english = {"alex" : 40, "lee" : 20}
art = {"lee" : 70, "harry" :40}

final = {}
for d in [History, Maths, english, art]:
    for k, v in d.items():
        if k not in final:
            final[k] = []
        final[k].append(v)
print(final)

Salida:

{'bob': [20, 90], 'alex': [80, 40], 'harry': [50, 40], 'lee': [20, 70]}



------------------------------------

final_dict={}

for el in lst:
    for person,value in el.items():
        if person not in final_dict:
            final_dict[person]=[value]
        else:
            final_dict[person].append(value)

Salida:

{'bob': [20, 90], 'alex': [80, 40], 'harry': [50, 40], 'lee': [20, 70]}

Su guía para un futuro mejor - libreflare
Su guía para un futuro mejor - libreflare