排序元组列表Python

时间:2017-01-02 11:56:16

标签: python sorting tuples

我有一个元组列表,我想根据另一个列表中指定的顺序进行排序。这是要排序的列表:

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

所需的输出是:

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

我所做的是定义一个订单并根据它的索引进行排序:

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

但我收到以下错误:

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

请有人帮忙吗?

2 个答案:

答案 0 :(得分: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()

您尝试比较get的{​​{1}}方法(不带参数)。他们确实无法解决。

答案 1 :(得分: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]) )