2017-01-02 7 views
-1

私は他のリストで指定された順序に従ってソートしたいタプルリストを持っています。タプルリストを並べ替えるPython

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

必要な出力は次のとおりです:

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

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

私はそれのインデックスに従った順序を定義し、ソートされた何これは、ソートするリストです。しかし、次のエラーが表示されます:

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

誰もがこれを助けることができますか?

+0

このコードはありません。 – e4c5

答えて

2

これはその作業を取得する一つの方法です:

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

は、ソート基準としてpredefined_listにインデックスを使用。

あなたはpython2を使用しているようです。お使いのバージョンのためのpython3エラーメッセージにビット明確である:

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

あなたはdictの(引数なし)get方法を比較してみてください。彼らは確かに陳腐ではありません。

+0

すぐにご回答いただきありがとうございます – 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])) 
関連する問題