Python 3.4 – ¿Cómo obtener el promedio de los valores del diccionario?

Tengo el siguiente diccionario:

StudentGrades = { 'Ivan': [4.32, 3, 2], 'Martin': [3.45, 5, 6], 'Stoyan': [2, 5.67, 4], 'Vladimir': [5.63, 4.67, 6] } 

Quiero hacer una función que imprima el promedio de las calificaciones de los estudiantes, es decir, el promedio de los valores, pero no tengo idea de cómo. ¿Puedes ayudarme por favor?

Bien, entonces vamos a iterar sobre todas las claves del diccionario y promediar los elementos:

 avgDict = {} for k,v in StudentGrades.iteritems(): # v is the list of grades for student k avgDict[k] = sum(v)/ float(len(v)) 

ahora solo puedes ver

 avgDict Out[5]: {'Ivan': 3.106666666666667, 'Martin': 4.816666666666666, 'Stoyan': 3.89, 'Vladimir': 5.433333333333334} 

Por tu pregunta, creo que estás mareado por la iteración sobre los dictados, así que aquí está el mismo resultado con una lista:

 avgList = [] for k,v in StudentGrades.iteritems(): # v is the list of grades for student k avgDict.append(sum(v)/ float(len(v))) 

Sin embargo, tenga cuidado: el orden de los artículos en un diccionario NO está garantizado ; es decir, no se garantiza el orden de los valores / clave cuando se imprime o itera en el diccionario (ya que los dictados son “sin clasificar”). Sin embargo, se garantiza que el comportamiento sobre el mismo objeto de diccionario idéntico (sin adiciones / eliminaciones) dos veces se comportará de manera idéntica.

Si no desea realizar el cálculo simple, utilice statistics.mean:

 from statistics import mean StudentGrades = { 'Ivan': [4.32, 3, 2], 'Martin': [3.45, 5, 6], 'Stoyan': [2, 5.67, 4], 'Vladimir': [5.63, 4.67, 6] } for st,vals in StudentGrades.items(): print("Average for {} is {}".format(st,mean(vals))) 
 from scipy import mean map(lambda x: mean(StudentGrades[x]), StudentGrades) 

Genera esta salida:

 [3.1066666666666669, 3.8900000000000001, 5.4333333333333336, 4.8166666666666664] 

Si prefieres una solución que no sea escéptica, puedes usar sum y len como se supone por Jiby:

 map(lambda x: sum(StudentGrades[x])/len(StudentGrades[x]), StudentGrades) 

EDITAR: Lo siento mucho, olvidé que desea una solución de Python 3.4, por lo tanto (ya que obtendría un objeto de mapa devuelto) necesita, por ejemplo, un comando de lista adicional:

 from scipy import mean list(map(lambda x: mean(StudentGrades[x]), StudentGrades)) 

Esto devolverá la salida deseada.