2016-07-26 7 views
-1

ich eine Liste von dicts in Python haben, können sagen:Liste sortieren von dicts durch vordefinierte Werte in Python

mylist = [{key1: value1, key2: value2}, {key1: value3, key2: value4}, {key1: value5, key2: 'something else'},]

Und ich möchte, so dass die Liste in einer vordefinierten Reihenfolge sortieren

x = ['something else', value4, value2]

EDIT:

Mein erwartetes Ergebnis ist

mylist = [{key1: value5, key2: 'something else'}, {key1: value3, key2: value4}, {key1: value1, key2: value2}, ]

So Sortierung es ist im Grunde diese Liste auf key2 in der Reihenfolge der Liste x. Entschuldigung für mangelnde Klarheit.

Alles, was ich gefunden habe, ist alphabetisch oder numerisch zu sortieren, aber nicht mit einer speziellen Reihenfolge. Jede Hilfe wird sehr geschätzt.

Mit freundlichen Grüßen Oliver

+1

sortieren möchten, was Ihre "räumliche" ist die Ware? –

+1

bitte addieren Sie Ihre gewünschte Ausgabe ... es ist im Moment unklar. –

+0

Was definiert die Bestellung? Nach was sortieren Sie? Ist es einfach die Reihenfolge der Einträge in der Liste? Werden Strings zuerst sortiert? Gehören die gleichen Schlüssel in der Reihenfolge zusammen? Die Frage ist jetzt sehr zweideutig! – ospahiu

Antwort

2

sortierte Funktion kann es tun. Sie benötigen einen Schlüssel, um die Reihenfolge zu definieren.

>>> mylist 
[{1: 1, 2: 2}, {1: 3, 2: 4}, {1: 5, 2: 'something else'}] 
>>> x 
['something else', 4, 2] 
>>> sorted(mylist, key = lambda item: sum([ x.index(i) if i in x else len(x) for i in item.values()])) 
[{1: 5, 2: 'something else'}, {1: 3, 2: 4}, {1: 1, 2: 2}] 

--update--
wenn Sie mit dem Wert des zweiten

sorted(mylist, key = lambda item: x.index(item[item.keys()[1]])) 
0

Sie werden wahrscheinlich irgendeine Art von Lambda wollen:

>>> l = [1,5,2,6] 
>>> sorted(l,cmp=lambda x,y:x-y) 
[1,2,5,6] 
>>> sorted(l,cmp=lambda x,y:y-x) 
[6,5,2,1] 

einfach das Lambda ändern, um irgendwie zwei Werte vergleichen

Verwandte Themen