2016-04-30 19 views
1

Mein Codebeispiel wie untenErsetzen Wörterbuch Werte als Verhältnis der Gesamtwerte in der dict

dict1 = {'c': 2, 'p': 1.0}  

Wollen Werte des dict zu verändern ein Verhältnis von selbst

aus den Gesamtwerten darzustellen
dict1 = {'c': 0.6666666666666666, 'p': 0.3333333333333333} 
+1

kein Python-Experte, aber Sie können das Array von Werten erhalten, summieren, dann teilen Sie jeden Eintrag (Wert) durch die Summe, die Sie berechnet haben. –

Antwort

1
>>> d = {'c': 2, 'p': 1.0}              
>>> d1 = { k: d[k]/sum(d[k] for k in d) for k in d } 
>>> d1 
{'c': 0.6666666666666666, 'p': 0.3333333333333333} 
>>> 

Hinweis: Vermeiden Sie die Verwendung dict als Variablenname, es ist ein python's builtin.

Erklärung der Einzeiler:

  • d1 = {} -> d1 ist ein Wörterbuch

  • d1 = { k: ... for k in d} -> alle Tasten von d1 sind die von d

  • sum(d[k] for k in d) -> Berechnen Sie die Summe aller Werte von d

So enthält der ... Teil oben d[k]/sum(d[k] for k in d): das macht den Quotienten aus dem Wert, der dem Schlüssel k entspricht, mit der Summe aller Werte von d.

EDIT: wie Alykhank im Kommentar vorgeschlagen, ist es möglich, dies in zwei Zeilen zu tun und speichern Ausführungszeit durch Neuberechnung der Summe bei jeder Iteration.

>>> total = sum(d.values()) 
>>> d2 = {k: d[k]/total for k in d} 
>>> d2 
{'c': 0.6666666666666666, 'p': 0.3333333333333333} 
>>> 
+1

Ich würde vorschlagen, die Summe zu speichern, um eine Neuberechnung in jeder Iteration zu vermeiden: 'total = sum (d.values ​​())' dann 'd1 = {k: d [k]/gesamt für k in d}'. – alykhank