Teilen Sie jedes python-dictionary-Wert von total Wert
Habe ich
a = {'foo': 2, 'bar': 3, 'baz': 5 }
Ist es trotzdem kann ich bekommen a = {'foo': 0.2, 'bar': 0.3, 'baz': 0.5 }
in einer Zeile? Dividieren müssen jeder Wert durch die Summe Wert... ich kann einfach nicht bekommen es getan.. 🙁
Vielen, vielen Dank!
- Warum 'one line'?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Summe der Werte, dann verwenden Sie ein Wörterbuch, Verständnis zu erzeugen, ein neues Wörterbuch mit der normalisierten Werte:
Können Sie squeeze, die in einem one-liner, aber es ist nicht so gut lesbar:
Gab ich
sum()
mit einem floating-point-Wert ab, um zu verhindern, dass die/
Betreiber von über die Boden-division in Python 2, das würde passieren, wenntotal
undv
würde beiden ganze zahlen sein.In Python 3, fallen die
iter*
Präfixe:Beachten Sie, dass Sie nicht verwenden möchten
{k: v /sum(a.values()) for k, v in a.items()}
hier; der Wert von Ausdruck ist ausgeführt in jeder iteration in das Verständnis Schleife, die Neuberechnung dersum()
wieder und wieder. Diesum()
Schleifen über alle N-Elemente in das Wörterbuch aufzunehmen, so dass Sie am Ende mit einer quadratisch O(N^2) Lösung und nicht als ein O(N) Lösung für Ihr problem.total
hier{k:v/sum(a.values(), 0.0) for k,v in a.items()}
sum()
laufen würde für jedes Schlüssel-Wert-paar, eine vollständige Schleife über alle Werte jedes mal. Sie würde produzieren eine N*N loop eher als eine N-Schleife. Ich würde suchen linearen über quadratische jeder Zeit.p.s ich bin völlig neu in die Programmierung, aber diese ist die beste, die ich denken konnte.
Habe ich es mit einer Funktion