2012-04-10 3 views
2

Ich habe python gewöhnliches Wörterbuch. In dieser Reihenfolge wird die Reihenfolge nicht beibehalten. Ich muss die Elemente in der Anzeigenreihenfolge beibehalten. Ich weiß, dass OrderedDict diesen Job erledigen kann. aber, mein Problem ist, dass ich ein bestelltes Wörterbuch von einem bereits vorhandenen gewöhnlichen Wörterbuch bekommen muss. Dieses Wörterbuch kann nicht geändert werden. Das folgende ist mein gewöhnliches Wörterbuch:Python gewöhnliches Wörterbuch zu geordneter Wörterbuchumwandlung

d = {'tag': {'a': 1, 'c': {'k': 8}, 'b': 7, 'n': 6}} 

Gibt es irgendeine Weise in Python, Reihenfolge der Elemente in einem bereits vorhandenen Wörterbuch zu behalten? Jede Hilfe wird geschätzt. Verwenden von Python 2.7

+0

Ich verstehe es nicht. In welcher Reihenfolge möchten Sie Ihr vorhandenes Wörterbuch haben? In welcher Reihenfolge Sie Ihre Artikel auch aufgegeben haben, diese Bestellung ist bereits verloren. –

+2

Wenn gewöhnliche Wörterbücher die Reihenfolge beibehalten, warum würden geordnete Wörterbücher existieren? – Blender

+0

Da dies unmöglich ist, können wir vielleicht immer noch helfen, wenn Sie erklären können, warum Sie denken, dass Sie das tun müssen? –

Antwort

7

Kurze Antwort: Dies ist nicht möglich, sobald Sie das Wörterbuch erstellt haben, hat es keine Reihenfolge.

Artikel werden nach ihrem Hash und nicht nach ihrem Anzeigenauftrag gespeichert. Sie müssen die OrderedDict am Anfang erstellt haben, damit sie den Anzeigenauftrag erfassen kann, wenn Artikel eingefügt werden.

0

Okay, lassen Sie es klar ... theoretisch ist es nicht möglich.

Aber gerade für Lachen ..

Da Sie sich an der Shell-Ausgabe suchen und den Auftrag herauszufinden, (Ich gehe davon aus, so da, wie sonst würden Sie sich selbst den Auftrag schon?) Hier also wir gehen. .

import re 

d = {'tag': {'a': 1, 'b': 7, 'c': {'k': 8}, 'n': 6}} 
tags = d['tag'] 
sorted_keys = set(re.findall(r"'(\w)':", str(tags))).intersection(tags.keys()) 

print sorted_keys # You can form your OrderedDict