2017-01-02 3 views
-1

Ich habe eine Tupel-Liste, in der ich nach der in einer anderen Liste angegebenen Reihenfolge sortieren möchte. Dies ist die Liste sortiert werden:Eine Tupel-Liste sortieren Python

Start_Keyword=[(u'NUMBER', u'two', u'2.0', [1]), (u'RND', u'random', u'random', [8])] 

Die erforderliche Ausgabe lautet:

Start_Keyword=[(u'RND', u'random', u'random', [8]),(u'NUMBER', u'two', u'2.0', [1])] 

Was ich definiert haben wird einen Auftrag und sortiert nach dem Index davon:

predefined_list = ['PROB','RND','NUMBER'] 
ordering = {word: i for i, word in enumerate(predefined_list)} 
print sorted(Start_Keyword, key=lambda x: ordering.get) 

Aber ich erhalte den folgenden Fehler:

print sorted(Start_Keyword2, key=ordering.get) 
TypeError: unhashable type: 'list' 

kann mir bitte jemand helfen?

+0

nicht mit diesem Code. – e4c5

Antwort

2

ist dies eine Möglichkeit, dass die Arbeit zu bekommen:

lst = sorted(Start_Keyword, key=lambda x: predefined_list.index(x[0])) 
print(lst) 

den Index in predefined_list als Sortierkriterium verwenden.

Sie scheinen Python2 zu verwenden; in python3 für Ihre Version der Fehlermeldung ist etwas klarer:

TypeError: unorderable types: 
    builtin_function_or_method() < builtin_function_or_method() 

Sie versuchen, die get Methode (ohne Argumente) von dict zu vergleichen. Sie sind in der Tat unbestreitbar.

+0

Vielen Dank für Ihre schnelle Antwort, es funktioniert jetzt – Shany

1
predefined_list = ['PROB','RND','NUMBER'] 
Start_Keyword=[(u'NUMBER', u'two', u'2.0', [1]), (u'RND', u'random', u'random', [8])]  

order = {word:index for index, word in enumerate(predefined_list)} 
Start_Keyword.sort(key=lambda x: order.get(x[0]))