2009-08-09 2 views
4

Ich habe ein Problem damit, sortierte Listen aus Wörterbüchern zu erstellen. Ich habe diese ListeWörterbuch nach anderem Wörterbuch sortieren

list = [ 
    d = {'file_name':'thisfile.flt', 'item_name':'box', 'item_height':'8.7', 'item_width':'10.5', 'item_depth':'2.2', 'texture_file': 'red.jpg'}, 
    d = {'file_name':'thatfile.flt', 'item_name':'teapot', 'item_height':'6.0', 'item_width':'12.4', 'item_depth':'3.0' 'texture_file': 'blue.jpg'}, 
    etc. 
] 

Ich versuche, durch die Liste Schleife und

  • von jedem Wörterbuch eine neue Liste erstellen Elemente aus dem Wörterbuch enthält. (Es variiert, welche Elemente und wie viele Elemente müssen in die Liste angehängt werden, wenn der Benutzer macht die Wahl)
  • sortiert die Liste

Wenn ich irgendwie sagen, ich denke, ein neues Wörterbuch wie das Erstellen

order = { 
    'file_name': 0, 
    'item_name': 1, 
    'item_height': 2, 
    'item_width': 3, 
    'item_depth': 4, 
    'texture_file': 5 
} 

und sortiert jede Liste nach den Werten im Auftragsverzeichnis.


Während einer Ausführung des Skripts alle Listen wie diese

['thisfile.flt', 'box', '8.7', '10.5', '2.2'] 
['thatfile.flt', 'teapot', '6.0', '12.4', '3.0'] 

auf der anderen Seite aussehen könnte sie wie diese

['thisfile.flt', 'box', '8.7', '10.5', 'red.jpg'] 
['thatfile.flt', 'teapot', '6.0', '12.4', 'blue.jpg'] 

aussehen könnte ich meine Frage erraten, wie würde Ich mache eine Liste von bestimmten Werten aus einem Wörterbuch und sortiere sie nach den Werten in einem anderen Wörterbuch, das die gleichen Schlüssel wie das erste Wörterbuch hat?

Schätzen Sie irgendwelche Ideen/Anregungen, sorry für noobish Verhalten - ich lerne immer noch Python/hat

+0

Die 'namedtuple' Klasse könnte Ihre Zwecke besser passen hier als Wörterbücher. Es ist im Collections-Modul auf Python 2.6+, oder wenn Sie auf 2.4 oder 2.5 sind, erhalten Sie es aus dem Python-Cookbook: http://code.activestate.com/recipes/500261/ –

Antwort

11

Der erste Code-Box Programmierung ungültig Python Syntax (Ich vermute, die d = Teile Fremd sind ...?) Sowie unkluges Trampling über den eingebauten Namen list.

Wie auch immer, zum Beispiel gegeben:

d = {'file_name':'thisfile.flt', 'item_name':'box', 'item_height':'8.7', 
    'item_width':'10.5', 'item_depth':'2.2', 'texture_file': 'red.jpg'} 

order = { 
    'file_name': 0, 
    'item_name': 1, 
    'item_height': 2, 
    'item_width': 3, 
    'item_depth': 4, 
    'texture_file': 5 
} 

eine raffinierte Art und Weise das gewünschte Ergebnis zu erhalten ['thisfile.flt', 'box', '8.7', '10.5', '2.2', "red.jpg'] wäre:

def doit(d, order): 
    return [d[k] for k in sorted(order, key=order.get)] 
+1

ah ja, ich habe redigiert der Post zu oft vor dem Posten und wurde schlampig. Danke für die nette Antwort, ich hätte es nie herausgefunden –

+0

@Ian, du bist willkommen! –

+0

Das ist nicht, was ich in 2.6.2 bekomme: >>> sortiert ((d [k] für k in Reihenfolge), key = order.get, reverse = True) ['8.7', 'box', ' thisfile.flt ',' red.jpg ',' 2.2 ', '10 .5'] in 3.0, bekomme ich einen Fehler: >>> sortiert ((d [k] für k in Reihenfolge), Schlüssel = Reihenfolge. erhalten, Reverse = True Traceback (jüngste Aufforderung zuletzt): File "" Linie 1 in Typeerror: unorderable Typen: NoneType() hughdbrown