Divide el valor de cada diccionario de python por el valor total

Tengo a = {'foo': 2, 'bar': 3, 'baz': 5 }

De todos modos, ¿puedo obtener a = {'foo': 0.2, 'bar': 0.3, 'baz': 0.5 } en una línea? Necesito dividir cada valor por el valor total … Simplemente no puedo hacerlo … 🙁

Muchas gracias!

Sume los valores, luego use un diccionario de comprensión para producir un nuevo diccionario con los valores normalizados:

 total = sum(a.itervalues(), 0.0) a = {k: v / total for k, v in a.iteritems()} 

Puede comprimir eso en una sola línea, pero no será tan legible:

 a = {k: v / total for total in (sum(a.itervalues(), 0.0),) for k, v in a.iteritems()} 

Le di sum() con un valor de inicio de punto flotante para evitar que el operador / use la división de piso en Python 2, lo que sucedería si total y v fueran ambos enteros.

En Python 3, elimine los prefijos iter* :

 a = {k: v / total for total in (sum(a.values()),) for k, v in a.items()} 

Tenga en cuenta que no desea utilizar {k: v / sum(a.values()) for k, v in a.items()} aquí; la expresión de valor se ejecuta para cada iteración en el bucle de comprensión, recalculando la sum() una y otra vez. La sum() recorre todos los N elementos del diccionario, por lo que termina con una solución cuadrática O (N ^ 2) en lugar de una solución O (N) para su problema.

 def div_d(my_dict): sum_p = sum(my_dict.values()) for i in my_dict: my_dict[i] = float(my_dict[i]/sum_p) return my_dict 

pd soy totalmente nuevo en progtwigción pero esto es lo mejor que pude pensar.

Lo hice usando una función.

 a = {'foo': 2, 'bar': 3, 'baz': 5} def func1(my_diction): total = 0 for i in my_diction: total = total + my_diction[i] for j in my_diction: my_diction[j] = (float)(my_diction[j])/total return my_diction print (func1(a))