如何在Python中订购此列表?

时间:2009-11-23 10:24:34

标签: python list sorting

[(u'we', 'PRP'), (u'saw', 'VBD'), (u'you', 'PRP'), (u'bruh', 'VBP'), (u'.', '.')]

我想通过“PRP,VBD,PRP和VBP”按字母顺序排序 这不是传统的那种,对吧?

4 个答案:

答案 0 :(得分:15)

使用itemgetter:

>>> a = [(u'we', 'PRP'), (u'saw', 'VBD'), (u'you', 'PRP'), (u'bruh', 'VBP'), (u'.', '.')]
>>> import operator
>>> a.sort(key = operator.itemgetter(1))
>>> a
[(u'.', '.'), (u'we', 'PRP'), (u'you', 'PRP'), (u'saw', 'VBD'), (u'bruh', 'VBP')]

答案 1 :(得分:7)

sort method使用key参数从每个参数中提取比较键,即key是一个将列表项转换为您希望排序的值的函数。 / p>

在这种情况下,use a lambda很容易从每个元组中提取第二个项目:

>>> mylist = [(u'we', 'PRP'), (u'saw', 'VBD'), (u'you', 'PRP'), (u'bruh', 'VBP')
, (u'.', '.')]
>>> mylist.sort(key = lambda x: x[1])
>>> mylist
[(u'.', '.'), (u'we', 'PRP'), (u'you', 'PRP'), (u'saw', 'VBD'), (u'bruh', 'VBP')]

答案 2 :(得分:1)

您可以在sort方法中传递比较函数。

示例:

l = [(u'we', 'PRP'), (u'saw', 'VBD'), (u'you', 'PRP'), (u'bruh', 'VBP'), (u'.', '.')]
l.sort(lambda x, y: cmp(x[1], y[1])) # compare tuple's 2nd elements

输出:

>>> l
[(u'.', '.'),
 (u'we', 'PRP'),
 (u'you', 'PRP'),
 (u'saw', 'VBD'),
 (u'bruh', 'VBP')]
>>> 

答案 3 :(得分:0)

或者使用内置函数排序(类似于Nick_D的答案):

ls = [(u'we', 'PRP'), (u'saw', 'VBD'), (u'you', 'PRP'), (u'bruh', 'VBP'), (u'.', '.')]


sorted(ls, cmp=lambda t1, t2: cmp(t1[1], t2[1]))