2017-12-11 2 views
-1
property_dict = { 
     "u" : ("unit", "Unit"), 
     "h": ("hsn", "HSN"), 
     "n": ("name", "Name"), 
     "t": ("gst_rate", "GST Rate"), 
     "a": ("abbr_name", "Abbreviation"), 
     "pg": ("product_group", "Group"), 
     "rq": ("reorder_qty", "Reorder Qty"), 
     "s": ("stock", "Stock"), 
     "pln": ("price_list_name", "Price List Name"), 
     "plv": ("price_list_value", "Price List Value") 
     } 
property_dict_keyorder = {k:v for v,k in enumerate(["u", "h", "t", "a", "pg", "rq", "s", "pln", "plv"])} 


property_dict = OrderedDict(sorted(property_dict.items(), key=lambda i: property_dict_keyorder.get(i[0]))) 

Fehler Sortierung:Typeerror, wenn ein Wörterbuch

property_dict = OrderedDict(sorted(property_dict.items(), key=lambda i: >  property_dict_keyorder.get(i[0]))) TypeError: 
unorderable types: int() < NoneType() 

Ich versuche, die dictioanry mit keyorder zu sortieren. I gedruckt, um die property_dict_keyorder

({'a': 3, 'pln': 7, 'u': 0, 'rq': 5, 'h': 1, 'pg': 4, 's': 6, 't': 2, 'plv': 8})

und überprüft die Reihenfolge beliebig ist, sondern auf das Sortieren I den obigen Fehler zu bekommen.

Ich lese Syntax behind sorted(key=lambda :) Aber ich bin immer noch nicht in der Lage zu verstehen, was schief läuft?

+0

Es sieht nicht wie ' "n"' in Ihrer Bestellung ist. – user2357112

+0

Warum erstellen Sie überhaupt nicht erst ein OrderedDict aus einer Liste von Schlüssel/Wert-Paaren? – user2357112

+1

'property_dict_keyorder.get (i [0])' gibt 'None' zurück, weil' i [0] 'nicht im Wörterbuch vorhanden ist. –

Antwort

0

A dictionary in Python is a collection of unordered values accessed by key rather than by index. The keys have to be hashable: integers, floating point numbers, strings, tuples, and frozensets are hashable, while lists, dictionaries, and sets other than frozensets are not.

Sie haben zwei Optionen:

entweder verwenden [collections.OrderedDict][1]

oder diese Methode Tupel verwenden Format als Schlüssel, Wert-Paar:

Alarm: bitte überprüfen Sie, dass Sie nicht alle Schlüssel in Schlüsseln haben _order Liste wie 'n'

order=["u", "h", "t", "a", "pg", "rq", "s", "pln", "plv"] 
property_dict = { 
     "u" : ("unit", "Unit"), 
     "h": ("hsn", "HSN"), 
     "n": ("name", "Name"), 
     "t": ("gst_rate", "GST Rate"), 
     "a": ("abbr_name", "Abbreviation"), 
     "pg": ("product_group", "Group"), 
     "rq": ("reorder_qty", "Reorder Qty"), 
     "s": ("stock", "Stock"), 
     "pln": ("price_list_name", "Price List Name"), 
     "plv": ("price_list_value", "Price List Value") 
     } 

key_value=[0]*len(property_dict.keys()) 
tuple_format=[(i,j) for i,j in property_dict.items()] 
for value in tuple_format: 
    if value[0] in order: 
     key_value[order.index(value[0])]=value 

print(key_value) 

Ausgang:

[('u', ('unit', 'Unit')), ('h', ('hsn', 'HSN')), ('t', ('gst_rate', 'GST Rate')), ('a', ('abbr_name', 'Abbreviation')), ('pg', ('product_group', 'Group')), ('rq', ('reorder_qty', 'Reorder Qty')), ('s', ('stock', 'Stock')), ('pln', ('price_list_name', 'Price List Name')), ('plv', ('price_list_value', 'Price List Value')), 0] 

Ausgabe: