【发布时间】:2009-11-23 10:24:34
【问题描述】:
[(u'we', 'PRP'), (u'saw', 'VBD'), (u'you', 'PRP'), (u'bruh', 'VBP'), (u'.', '.')]
我想按字母顺序排列,按“PRP、VBD、PRP 和 VBP” 这不是传统的那种,对吧?
【问题讨论】:
[(u'we', 'PRP'), (u'saw', 'VBD'), (u'you', 'PRP'), (u'bruh', 'VBP'), (u'.', '.')]
我想按字母顺序排列,按“PRP、VBD、PRP 和 VBP” 这不是传统的那种,对吧?
【问题讨论】:
使用 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')]
【讨论】:
sort method 采用key 参数从每个参数中提取比较键,即key 是一个将列表项转换为您希望排序的值的函数。
在这种情况下,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')]
【讨论】:
您可以在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')]
>>>
【讨论】:
key Python 将遍历列表一次以计算键,然后使用这些键进行排序。另一方面,使用cmp,它会在每次需要比较两个值时调用该函数。
cmp 快吗?我必须测试这两种方法;-)
或者使用排序的内置函数(类似于 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]))
【讨论】: