Python中字符串列表的排序列表[重复]
Posted
技术标签:
【中文标题】Python中字符串列表的排序列表[重复]【英文标题】:Sort list of lists of strings in Python [duplicate] 【发布时间】:2014-10-04 12:52:07 【问题描述】:如何根据第一个元素对以下内容进行排序?
list1 = [["Value313",1],["Value421",3],["Value234",2]]
最终,我应该得到以下信息:
list1 = [["Value234",2],["Value313",1],["Value421",3]]
【问题讨论】:
list1.sort()
将在第一个元素上默认排序 list1(原位)
【参考方案1】:
列表的默认排序顺序(按字典顺序)已经是你想要的了。
>>> list1 = [["Value313",1],["Value421",3],["Value234",2]]
>>> list1.sort()
>>> print list1
[['Value234', 2], ['Value313', 1], ['Value421', 3]]
【讨论】:
【参考方案2】:sorted(list1,key=lambda x : x[0])
[['Value234', 2], ['Value313', 1], ['Value421', 3]]
使用 sorted 并使用键 lambda x[0]
其中x[0]
是每个子列表中的第一个元素
或就地排序以避免创建新列表:
list1 = [["Value313",1],["Value421",3],["Value234",2]]
list.sort(list1,key=lambda x : x[0])
print list1
[['Value234', 2], ['Value313', 1], ['Value421', 3]]
【讨论】:
反对票的具体原因是什么?【参考方案3】:要对list1
进行就地排序(不创建另一个列表),请使用:
from operator import itemgetter
list1.sort(key=itemgetter(0))
如果你想创建另一个列表并留下list1
unsorted 使用:
from operator import itemgetter
list2 = sorted(list1, key=itemgetter(0))
您可以使用 lambda,但 operator.itemgetter 通常具有更好的性能,因为它处于 C 级别。
【讨论】:
我确实做到了,对于整数对列表并使用sorted
,我(旧)机器上的itemgetter
解决方案每个循环207 µs, lambda
每个循环 359 µs以上是关于Python中字符串列表的排序列表[重复]的主要内容,如果未能解决你的问题,请参考以下文章