Python - Problema con suma de datos dentro de un diccionario

 
Vista:
sin imagen de perfil
Val: 6
Ha disminuido su posición en 20 puestos en Python (en relación al último mes)
Gráfica de Python

Problema con suma de datos dentro de un diccionario

Publicado por Fawkes (2 intervenciones) el 18/10/2020 05:52:16
recibo este diccionario para ejecutar mi código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
print(promedio_facultades({
    20170136837:{
        "nombres" : "Jorge Juan",
        "apellidos" : "Moreno, López",
        "documento" : 88481595,
        "programa" : "ARQU",
        "materias" : [
            {
            "facultad" : "Arquitectura",
            "codigo" : "ARQU-8218",
            "nota" : 4.49,
            "creditos" : 3,
            "retirada" : "No",
            },
            {
            "facultad" : "Arquitectura",
            "codigo" : "ARQU-2113",
            "nota" : 2.97,
            "creditos" : 2,
            "retirada" : "Si",
            },
            {
            "facultad" : "Arquitectura",
            "codigo" : "ARQU-5048",
            "nota" : 4.26,
            "creditos" : 0,
            "retirada" : "No",
            },
        ]
    },
    20130225137:{
        "nombres" : "Sara Carolina",
        "apellidos" : "Gómez, Fernández",
        "documento" : 58770043,
        "programa" : "ARQD",
        "materias" : [
            {
            "facultad" : "Arquitectura",
            "codigo" : "ARQD-7738",
            "nota" : 3.36,
            "creditos" : 3,
            "retirada" : "No",
            },
            {
            "facultad" : "Arquitectura",
            "codigo" : "ARQD-9115",
            "nota" : 2.62,
            "creditos" : 1,
            "retirada" : "No",
            },
            {
            "facultad" : "Arquitectura",
            "codigo" : "ARQD-7698",
            "nota" : 1.59,
            "creditos" : 4,
            "retirada" : "Si",
            },
        ]
    },
    20110274333:{
        "nombres" : "Carolina Paula",
        "apellidos" : "Ochoa, López",
        "documento" : 82364435,
        "programa" : "DIMD",
        "materias" : [
            {
            "facultad" : "Diseño",
            "codigo" : "DIMD-7972",
            "nota" : 3.15,
            "creditos" : 1,
            "retirada" : "No",
            },
        ]
    },
    20200116062:{
        "nombres" : "Sara Camila",
        "apellidos" : "Martínez, Gómez",
        "documento" : 40079000,
        "programa" : "DIGR",
        "materias" : [
            {
            "facultad" : "Diseño",
            "codigo" : "DIGR-9331",
            "nota" : 4.0,
            "creditos" : 3,
            "retirada" : "No",
            },
            {
            "facultad" : "Diseño",
            "codigo" : "DIGR-3530",
            "nota" : 3.4,
            "creditos" : 3,
            "retirada" : "No",
            },
            {
            "facultad" : "Medicina",
            "codigo" : "MEDI-8548",
            "nota" : 3.1,
            "creditos" : 3,
            "retirada" : "No",
            },
            {
            "facultad" : "Medicina",
            "codigo" : "MEDI-9771",
            "nota" : 3.91,
            "creditos" : 2,
            "retirada" : "No",
            },
        ]
    }
}



necesito sumar las notas solamente de la misma facultad, un acumulado de notas de arquitectura, diseño y medicina, hay muchos mas diccionarios y carreras claro, no podría hacerlo uno a uno
aquí está el pedazo de código donde necesito hacerlo, donde están los cuatro # pero así como lo hice se suman las notas de todas las carreras


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
def nuevo_dicc(dicc, contando_externos : bool = True):
 
 
    nota_x_cred_temp = 0
 
    cred_temp = 0
 
    nota_temp = 0
 
    for llave, value in dicc.items():
 
        materias_temp = value["materias"]
 
        for i in range (len(materias_temp)):
 
 
 
            if contando_externos == False:
 
                value_temp = str(llave)
 
                #posible if len(materias_temp == 0 or materias_temp == 1 and materias_temp[i]["creditos"] =0)
 
                if materias_temp[i]["codigo"][0:4] == value["programa"] and value_temp[4:6] != "05" and materias_temp[i]["retirada"] == "No":
                    pass
                    #print("Entra False",value["materias"][i],i)
 
            if contando_externos == True:
 
                value_temp = str(llave)
 
                if materias_temp[i]["retirada"] == "No" and materias_temp[i]["creditos"] !=0:
 
                    if materias_temp[i]["facultad"] in nom_facultades(dicc):
 
 
 
 
                        # nota_x_cred_temp = nota_x_cred_temp + materias_temp[i]["nota"] * materias_temp[i]["creditos"]
 
                        # cred_temp = cred_temp + materias_temp[i]["creditos"]
 
                        # nota_temp = round((nota_x_cred_temp / cred_temp),2)
 
                        # print(nota_x_cred_temp, cred_temp)

dc2
dc
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 388
Bronce
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Problema con suma de datos dentro de un diccionario

Publicado por Daniel (111 intervenciones) el 18/10/2020 16:42:53
Hola ,

Si no he entendido mal el problema se pude resolver con diccionarios

1
2
3
4
5
6
7
8
9
10
11
12
13
results = {}
 
for key, value in data.items():
  for materias in value['materias']:
    # Si no esta la facultad en la lista creamos una nueva
    if materias['facultad'] not in results:
      results[materias['facultad']] = {"notas":0, "casos":0}
 
    # Ahora se agrega los datos
    results[materias['facultad']]["notas"] += materias["nota"]
    results[materias['facultad']]["casos"] += 1
 
print(results)

Al finalizar en la variable results hay un diccionario con las notas y el numero de casos de cada facultad.

1
2
3
{'Arquitectura': {'notas': 19.29, 'casos': 6},
'Diseño': {'notas': 10.55, 'casos': 3},
'Medicina': {'notas': 7.01, 'casos': 2}}

Saludos,
Daniel Rodríguez
Analytics Lane
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 6
Ha disminuido su posición en 20 puestos en Python (en relación al último mes)
Gráfica de Python

Problema con suma de datos dentro de un diccionario

Publicado por Fawkes (2 intervenciones) el 18/10/2020 23:46:08
Muchas gracias, no era así exactamente pero me ayudó bastante.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar