2016-06-28 2 views
0

Ich muss die Elemente in einem dictionary bestellen, basierend auf den letzten Zeichen der Zeichenfolgen in den Werten.Wie bestelle ich ein Wörterbuch in Python, basierend auf einem Teil der in den Werten enthaltenen Strings?

Zum Beispiel meines Wörterbuch ist {1:'001 abc', 2:'001 xyz', 3:'001 efg'}

aber ich brauche es zu sortieren, so sein {1:'001 abc', 3:'001 efg', 2:'001 xyz}

(der erste Teil der Zeichenfolge in den Werten identisch ist, dann ein Leerzeichen, und der zweite Teil Die Zeichenfolge könnte verwendet werden, um die Werte alphabetisch zu sortieren.)

Wie könnte ich das tun?

Vielen Dank im Voraus für Ihre Hilfe.

+0

Verwenden Sie ein geordnetes dict https://docs.python.org/2/library/collections.html – Julien

Antwort

0

Verwenden Sie ein ordered dict: "die Elemente in einem Wörterbuch zu bestellen"

from collections import OrderedDict 
d = OrderedDict() 
for k, v in sorted({1:'001 abc', 2:'001 xyz', 3:'001 efg'}.items(), key=lambda t: t[1]): 
    d[k] = v 
d 
>> OrderedDict([(1, '001 abc'), (3, '001 efg'), (2, '001 xyz')]) 
+0

Dies kann einfach 'new_dict = OrderedDict (sortiert (alt_dict.items(), key = Lambda L: L [1 ])) '(zB: Sie benötigen keine For-Schleife und Zuweisungen) –

0

Dicts nicht sortiert sind, so gibt es keine Möglichkeit,

Aber Sie können die Elemente im Wörterbuch wie Sie möchten.

Zum Beispiel:

d = { 1: '001 abc', 2: '001 xyz', 3: '001 efg' } 

for key, value in sorted(d.items(), key=lambda item: item[1]): 
    print('{}: {}'.format(key, value)) 

EDIT

Wie andere haben darauf hingewiesen, können Sie die Elemente in eine OrderedDict setzen, wenn Sie mit ihnen als Wörterbuch halten wollen, aber die sortierter Reihenfolge erhalten .

Wenn Sie das tun wollen, würde ich diesen Code vorschlagen:

od = OrderedDict(sorted(d.items(), key=lambda item: item[1])) 

ZWEITE EDIT

FYI, operator.itemgetter(1)lambda item: item[1] ersetzen kann. Ich bin mir nicht sicher, was ich für klarer halte.