2017-01-02 52 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])) 
相关问题