2016-04-13 3 views
0

Ich habe ein Diktat mit etwa 50.000 ganzzahligen Werten und eine Menge, die die Schlüssel von 100 enthält. Meine innere Schleife inkrementiert oder dekrementiert die Werte der dict-Elemente auf unvorhersehbare Weise.Sortierte Ansicht von dict-Werten beibehalten?

Periodisch muss ich ein Element des Satzes durch den Schlüssel des größten Elements ersetzen, das noch nicht im Satz ist. Wenn die diktierten Elemente sortiert wurden, würde sich die Reihenfolge der Sortierung leicht zwischen Aufrufen dieser Routine ändern, nicht dramatisch.

Das ganze dict jedes Mal neu zu sortieren scheint verschwenderisch, obwohl vielleicht weniger, da es schon "fast" sortiert ist. Obwohl ich mich der vorzeitigen Optimierung schuldig machen kann, wird die Leistung wichtig sein, da dies eine sehr große Anzahl von Iterationen ausführen wird, so dass ich es wert war, meine Besseren zu fragen, ob es einen offensichtlich effizienteren und pythonischeren Ansatz gibt.

Ich bin mir der Vorstellung von dict "Ansichten" - Windows auf die Inhalte, die aktualisiert werden, wenn der Inhalt sich ändert. Gibt es so etwas wie eine "sortierte Ansicht"?

+0

Was sind Ihre Schlüssel für das Wörterbuch? Und wie viele Modifikationen der Werte passieren, bevor Sie wieder nach dem Maximum suchen? – Markus

+0

Die Schlüssel sind Integer-Bereich (50.000), und es gibt vielleicht 50 oder so Änderungen zwischen Zeiten, die ich das Maximum finden muss. Übrigens hätte ich nicht "Inkremente oder Dekremente" sagen sollen: - Genauer gesagt werden sie um einen Betrag geändert, der oft +/- 1, aber immer weniger als 10% ihres Maximalwertes beträgt. – JHD

+0

Dann ist das Verwenden eines 'Counter'-Objekts (wie von Francesco vorgeschlagen) wahrscheinlich der Weg zu gehen. – Markus

Antwort

0

Statt eine dict verwenden Sie ein Counter Objekt verwenden könnte, die eine saubere most_common(n) Methode hat die

Zurück eine Liste der n am häufigsten vorkommenden Elemente und ihre Zählungen aus der am häufigsten auf die am wenigsten.

Verwandte Themen