使用第一个元素对列表进行排序

时间:2014-03-18 12:04:12

标签: python sorting python-2.7

我有名单。

li = ['455:1', '2919:1', '275:71', '2840:64']

我试过了:

print sorted(li)
result: ['275:71', '2840:64', '2919:1', '455:1']

print sorted(li, key=itemgetter(0))
result: ['2919:1', '275:71', '2840:64', '455:1']

print sorted(li, key=lambda x: (x[0]))
result: ['2919:1', '275:71', '2840:64', '455:1']

我想要

['275:71', '455:1', '2840:64', '2919:1']

有任何修复建议吗?

1 个答案:

答案 0 :(得分:2)

您需要拆分字符串并将第一个值转换为整数:

sorted(li, key=lambda s: int(s.split(':')[0]))

否则你只是按字典顺序而不是数字排序。

演示:

>>> li = ['455:1', '2919:1', '275:71', '2840:64']
>>> sorted(li, key=lambda s: int(s.split(':')[0]))
['275:71', '455:1', '2840:64', '2919:1']

itemgetter(0)x[0]只选择字符串的第一个字符,因此只对'2''4' 进行排序,在具有相同初始字符的值不受影响。