2014-02-14 23 views
7

Ich habe ein WörterbuchWie ein Wörterbuch sortieren basierend auf einer Liste in Python

a = {'ground': obj1, 'floor 1': obj2, 'basement': obj3} 

Ich habe eine Liste.

a_list = ['floor 1', 'ground', 'basement'] 

Ich möchte Wörterbuch a mit seinen Schlüsseln basierend auf der Liste sortieren. Ist es möglich, das zu tun?

dh:

sort(a).based_on(a_list) #this is wrong. But I want something like this. 
+1

Wörterbücher * haben keine Bestellung *, so dass Sie nicht das Wörterbuch sortieren. Möchten Sie stattdessen eine sortierte Werteliste? Oder eine sortierte Liste von Schlüssel-Wert-Tupeln? –

+0

@MartijnPieters alles wird tun Ich habe nichts dagegen, das Wörterbuch in Tupel zu konvertieren und dann sortieren sie ... – Wagh

Antwort

8

Die naive Weise, Sortieren der Liste von (Schlüssel, Wert) Tupeln:

sorted(a.items(), key=lambda pair: a_list.index(pair[0])) 

schnelleren Weg, eine Indexkarte zu schaffen zuerst:

index_map = {v: i for i, v in enumerate(a_list)} 
sorted(a.items(), key=lambda pair: index_map[pair[0]]) 

Beide gehen davon aus, dass a_listalle Schlüssel enthält, die ingefunden werden.

Demo: aus den Schlüssel-Wert-Paaren

>>> a = {'ground': 'obj1', 'floor 1': 'obj2', 'basement': 'obj3'} 
>>> a_list = ('floor 1', 'ground', 'basement') 
>>> sorted(a.items(), key=lambda pair: a_list.index(pair[0])) 
[('floor 1', 'obj2'), ('ground', 'obj1'), ('basement', 'obj3')] 
>>> index_map = {v: i for i, v in enumerate(a_list)} 
>>> sorted(a.items(), key=lambda pair: index_map[pair[0]]) 
[('floor 1', 'obj2'), ('ground', 'obj1'), ('basement', 'obj3')] 
6

Sie könnten nur die Werte in der Reihenfolge der von der angezeigten Liste Schlüssel abrufen und eine neue Liste machen.

Beispiel:

d = a  # dictionary containing key-value pairs that are to be ordered 
l = a_list # list of keys that represent the order for the dictionary 
# retrieve the values in order and build a list of ordered key-value pairs 
ordered_dict_items = [(k,d[k]) for k in l] 
Verwandte Themen