2016-04-27 4 views
0

Ich habe ein Wörterbuch zu erstellen, die wie folgt aussieht:Python: effiziente Möglichkeit, eine Liste von dict Werten mit einer bestimmten Reihenfolge

myDict = { "age":value1,"size":value2,'weigth':value3 ... } 

Und ich einfach aus diesem Wörterbuch aber in einiger Reihenfolge will, um eine Liste von Werten definiert durch eine Liste:

order_list = ["age","weigth","size", ... ] 

So wird das Ergebnis sein:

result_list = [value1,value3,value2, ... ] 

der einfachste Weg zu durchlaufen ist die order_list auf diese Weise:

for key in order_list: 
    result_list.append(myDict[key]) 

Aber ich glaube, dass es eine effizientere und saubere Art und Weise zu tun, was ich versuche, da diese Methode zu tun ist teuer aus zwei Gründen:

  1. Die Spaltenliste sehr lang ist
  2. ich dieses 1000 Mal tun müssen/Sekunde
+2

Verwandte Gewinde mit einem Benchmark: http://stackoverflow.com/questions/18453566/python-dictionary-get-list-of-values-for- Liste der Schlüssel. – alecxe

+0

Ich denke nicht, Wörterbücher sind Hashtabellen, also ist der Abruf O (1) und die Gesamtkomplexität ist O (n), was optimal ist. Also solltest du wahrscheinlich etwas völlig anderes ausprobieren. – BlackBear

+0

Nein, wie @BlackBear zeigt, wirst du nicht besser als 'O (n)'. Ein wenig Verständnis könnte als sauberer angesehen werden, verbessert jedoch nicht die Leistung. – schwobaseggl

Antwort

1

eine Liste Verständnis zu verwenden ist kürzer:

myDict = { "age":"value1","size":"value2",'weigth':"value3"} 
order_list = ["age","weigth","size"] 
result_list = [myDict[x] for x in order_list] 

map wird auch tun:

# Python 3.x (map returns an iterator) 
result_list = list(map(myDict.get, order_list)) 

# Python 2.x (map returns a list) 
result_list = map(myDict.get, order_list) 
Verwandte Themen