2016-06-30 8 views
0

Wenn ich ein Python-Wörterbuch haben wieHinzufügen von Einträgen aus Wörterbuch Python basierend auf Schlüssel

my_dict = {1:4, 2: 9, 3: 17, 4: 27, 5: 51, 6: 129, 7: 285, 8: 533} 

wie kann ich durch sie durchlaufen eine Zählung auf Tasten in der folgenden Weise auf Basis herzustellen:

Wenn mein Schlüssel ist am kleinsten, dh 1, dann zurück 4/Summe (Werte) [Ich weiß, wie man das berechnet].

Wenn mein Schlüssel nicht am kleinsten ist, dann Rücksummen (Werte, die früheren Schlüsseln entsprechen)/Summe (Werte); Zum Beispiel würden wir für Schlüssel 2 4 + 9/1055 zurückgeben.

Danke für alle Einsichten!

+2

Der Punkt hinter Tasten verbal Tags und keine numerischen Indizes sein, die Sie Listen und Tupeln für haben. Es ist sehr ineffizient, Dictionary-Schlüssel in ganze Zahlen zu zerlegen - dafür gibt es in Python bessere Datenstrukturen. – dmitryro

+0

Sie können die Schlüssel durchlaufen, indem Sie 'for key in my_dict:', d. H. Eine einfache for-Schleife, ausführen. Beachten Sie außerdem, dass Wörterbücher nicht sortiert sind, sodass "vorherige Schlüssel" nicht eindeutig definiert sind. –

+0

Um etwas zu erweitern, was @dmitryro sagte: Ein Wörterbuch ist möglicherweise nicht der beste Weg, um Ihre Daten zu repräsentieren. Zum einen haben Wörterbücher keine bestimmte Reihenfolge, daher kann es schwierig sein zu bestimmen, was die "vorherigen" und "nächsten" Elemente sind. Es ist wahrscheinlich einfacher, zwei Listen zu verwenden, eine für Schlüssel und eine für Werte. Die Schlüsselliste kann in sortierter Reihenfolge gehalten werden. (Es ist unklar, aus Ihren Beispieldaten, ob die Werteliste auch sortiert werden kann.) –

Antwort

0

Versuchen Sie folgendes:

count_to_key = { 
    k: sum(vi for ki, vi in my_dict.items() 
       if ki <= k)/sum(my_dict.values()) 
       for k in my_dict.keys()} 
+0

>>> count_to_key [1] == 4/Summe (my_dict.values ​​()) Wahr >>> count_to_key [2] == (4 + 9)/sum (my_dict.values ​​()) Wahr – Alec

+0

oh das macht Sinn, die '4 + 9/1055' im OP verwirrt mich wegen des Mangels an Klammern, vergiss dann. –

+0

PEP 20 Zeile 2: Explizit ist besser als implizit :) – Alec

Verwandte Themen