eine Wörterbuch-Mapping einer Integerbereich auf einem anderen habe zu finden, als Beispiel:pythonic Art und Weise getrennte ganzzahligen Intervalle im Wörterbuch integer Mapping
data = {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 6, 8: 6, 9: 7, 10: 8}
Ich möchte alle Regionen finden, wo die numerischen Intervalle in den Werten fehlschlagen zu erhöhen, also sollte meine Ausgabe sein:
Für den obigen Eingang.
Ich denke, meine Antwort wird die Gruppierung Itertools Rezept beschrieben here beinhalten. Ich habe versucht, eine einfache Implementierung von ihm für meine Zwecke zu tun, aber ich bin nicht sicher, wie die Ergebnisse in mein gewünschten Ergebnis zu verwandeln:
from operator import itemgetter
from itertools import groupby
data = {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 6, 8: 6, 9: 7, 10: 8}
for k, pos in groupby(enumerate(data.iteritems()), lambda (i, (a, s)):i - s):
print map(itemgetter(1), pos)
Hat den Ausgang:
[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6)]
[(7, 6)]
[(8, 6), (9, 7), (10, 8)]
Welche richtig Gruppen meinen Eingangs Daten, aber gibt mir nicht das Intervall, das ich will. Die Herausforderung, die ich sehe, wenn ich diese Ausgabe in das von mir gewünschte Intervall zerlege, ist, dass sie mir ein Intervall für die 'Überspring-Region' gibt.
Hat das Wörterbuch immer einen Eintrag pro Index? Wenn ja, warum nicht einfach eine Liste verwenden? Wenn nicht: Wie behandelt man Lücken? –
Auch wenn Sie "nicht inkrementieren" sagen, können wir annehmen, dass die Werte in diesen Regionen konstant bleiben, oder könnten sie auch abnehmen? –
Die Werte bleiben in diesen Regionen konstant, sie werden nicht abnehmen. Die Schlüssel sind immer ein ganzzahliger Ganzzahlbereich von '(0, n)', während die Werte monoton ansteigen. Diese Daten könnten leicht als Liste gespeichert werden, nur das andere Werkzeug, das diese Bereiche berechnet, verwendet ein Wörterbuch. Es gibt keinen Grund, dass es nicht konvertiert werden kann. –