Iteration über python OrderedDict
Habe ich Folgendes OrderedDict:
OrderedDict([('r', 1), ('s', 1), ('a', 1), ('n', 1), ('y', 1)])
Dies tatsächlich stellt eine Häufigkeit eines Buchstabens in einem Wort.
Im ersten Schritt würde ich die letzten beiden Elemente zum erstellen einer union-Tupel wie folgt;
pair1 = list.popitem()
pair2 = list.popitem()
merge_list = (pair1[0],pair2[0])
new_pair = {}
new_pair[merge_list] = str(pair1[1] + pair2[1])
list.update(new_pair);
Diese haben für mich den folgenden OrderedList:
OrderedDict([('r', 1), ('s', 1), ('a', 1), (('y', 'n'), '2')])
Möchte ich nun zur Iteration über die Elemente, wobei er jedes mal die letzten drei und die Entscheidung auf der Grundlage der niedrigeren Summe der Werte, was ist die union-Objekt.
Zum Beispiel die obige Liste wird zu;
OrderedDict([('r', 1), (('s', 'a'), '2'), (('y', 'n'), '2')])
aber das oben war:
OrderedDict([ ('r', 1), ('s', 2), ('a', 1), (('y', 'n'), '2')])
Das Ergebnis wäre:
OrderedDict([('r', 1), ('s', 2), (('a','y', 'n'), '3')])
wie ich will, die auf der linken Seite zu haben, der kleinere Wert
Ich habe versucht, es selbst zu tun, aber nicht verstehen, wie zum Durchlaufen von einem Ende bis zum Anfang über ein OrderedDict.
Wie kann ich es tun?
BEARBEITET
Die Beantwortung der Kommentar:
Bekomme ich ein Wörterbuch der Häufigkeit von Buchstaben in einem Satz:
{ 's':1, 'a':1, 'n':1, 'y': 1}
und müssen, erstellen Sie einen huffman-Baum aus.
zum Beispiel:
((s,a),(n,y))
Ich bin mit python 3.3
Du meinst
reversed(OrderedDict.items())
?du hast Recht - ich bearbeitet meine Frage eigentlich, was ich tun muss
InformationsquelleAutor Dejell | 2014-01-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einfaches Beispiel
Ausgabe:
Zwei
bei mir auf Arbeit musste ich
d = OrderedDict()
stattd = collections.OrderedDict()
InformationsquelleAutor Zhongjun 'Mark' Jin
Entweder:
Oder:
reversed()
erstellt eine neue Liste, die die Rückseite der übergebenen Liste. Es wird sich nicht ändern, jeden Aspekt des ursprünglichenOrderedDict.
Dies führt in 'dict_items ist nicht subscriptable' oder 'dict_items ist nicht umkehrbar', bzw. für mich (python 3). Ich zu tun hatte:
for key in reversed(z.keys()): # get value using key then do stuff
Ja, das erste Beispiel funktioniert nicht in Python ist3. Das zweite Beispiel, aber funktioniert gut für mich in Python 3.5.2. @NicholasMorley
InformationsquelleAutor Robᵩ
Können Sie iterieren mit
enumerate
unditeritems
:Versuchen Sie es in Python 3.x mit
dict.items()
stattdict.iteritems()
.InformationsquelleAutor farukdgn
Beachten Sie, dass, wie bereits in den Kommentaren von adsmith, ist dies wohl eine Instanz eines XY-Problem und Sie sollten überdenken Ihre Datenstrukturen.
Gesagt haben, dass, wenn müssen Sie arbeiten, nur auf die letzten drei Elemente, dann Sie nicht brauchen zu Durchlaufen. Zum Beispiel:
Dann:
Produziert:
Sowie das Zusammenführen der ganzen Struktur vollständig müssen Sie nur:
Gibt:
InformationsquelleAutor BartoszKP