2017-06-30 2 views
1

Ich habe WörterbuchWie kann ich den Auftrag in OrderDict ändern?

from collections import OrderedDict 

md = {"r3":"piz","r1":"pic","r9":"piz","r12":"pic","r19":"lia","r2":"kurcc","r21":"jes","r99":"pic","r111":"kurcc","r116":"kurcc","r211":"ar","r221":"buc"} 

print (OrderedDict(sorted(md.items(), key=lambda t: t[0]))) 

Ich möchte es sortieren, von der niedrigsten number.But Ich habe

OrderedDict([('r1', 'pic'), ('r111', 'kurcc'), ('r116', 'kurcc'), ('r12', 'pic'), ('r19', 'lia'), ('r2', 'kurcc'), ('r21', 'jes'), ('r211', 'ar'), ('r221', 'buc'), ('r3', 'piz'), ('r9', 'piz'), ('r99', 'pic')]) 

Wie soll ich den Code ändern r1 zu haben, r2, r3 bestellen?

+0

Sind alle Tasten der Form ' 'r ...''? –

+0

Ja, sie sind diese Form. – MishaVacic

+0

vielleicht 'key = int (t [0] [1:])' –

Antwort

5

Wenn alle Tasten der Form 'r???' mit ??? eine ganze Zahl sind, können wir die folgenden Sortierschlüssel verwenden:

OrderedDict(sorted(md.items(), key=lambda t: int(t[0][1:])))

So, hier nehmen wir zuerst den Schlüssel mit t[0] wie Sie selbst gemacht haben. Als nächstes nehmen wir den Teilstring, der bei Index 1 beginnt (so dass wir die 'r' fallen lassen), und schließlich werfen wir ihn auf einen int(..), um numerische Vergleiche durchzuführen.

Dies erzeugt:

>>> OrderedDict(sorted(md.items(), key=lambda t: int(t[0][1:]))) 
OrderedDict([('r1', 'pic'), ('r2', 'kurcc'), ('r3', 'piz'), ('r9', 'piz'), ('r12', 'pic'), ('r19', 'lia'), ('r21', 'jes'), ('r99', 'pic'), ('r111', 'kurcc'), ('r116', 'kurcc'), ('r211', 'ar'), ('r221', 'buc')]) 
+0

Sie könnten auch eine Form der Datenüberprüfung erzwingen, so dass Sie immer ein 'rNNN' Muster haben, zB:' sorted (md.items(), Schlüssel = Lambda L: int (re.match ('r (\ d +) $', L [0]). Gruppe (1))) ' –

Verwandte Themen