2017-01-02 108 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])) 
相關問題