首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用itemgetter对列表进行排序

如何使用itemgetter对列表进行排序
EN

Stack Overflow用户
提问于 2018-07-25 13:54:53
回答 3查看 744关注 0票数 0
代码语言:javascript
复制
from operator import itemgetter

c = [['29325493', '491963279'], ['665431604', '107866412'],
    ['572747824', '834468627'], ['623075369', '146360674'],
    ['958964458', '525879903'], ['977175138', '523647968'],
    ['689471337', '580279579'], ['664237570', '288339955'],
    ['328743490', '207620319'], ['315386742', '528392695'],
    ['95567418', '163424206'], ['873955477', '450413794'],
    ['7616943', '842564675'], ['575682685', '33126205'],
    ['89779405', '844288987']]

c.sort(key=itemgetter(0),reverse=True)
print(c)

我试图通过获取每个小列表中的第一项来对列表进行排序。但是,我没有得到正确的答案,而是得到了以下结果:

代码语言:javascript
复制
[['977175138', '523647968'],['958964458', '525879903'],
['95567418', '163424206'], ['89779405', '844288987'],
['873955477', '450413794'], ['7616943', '842564675'],
['689471337', '580279579'], ['665431604', '107866412'],
['664237570', '288339955'], ['623075369', '146360674'],
['575682685', '33126205'], ['572747824', '834468627'],
['328743490', '207620319'], ['315386742', '528392695'],
['29325493', '491963279']]

问题是列表是按每个小列表中项目1的第一个字符排序的。例如,89779405小于873955477。

我该如何解决这个问题?

EN

回答 3

Stack Overflow用户

发布于 2018-07-25 14:01:10

您需要将子列表转换为整数列表,如下所示:

代码语言:javascript
复制
c = [[int(elem) for elem in l] for l in c]
c.sort(key=itemgetter(0),reverse=True)

或者使用将元素转换为整数的键函数:

代码语言:javascript
复制
c.sort(key=lambda l:int(l[0]),reverse=True)

我不认为在第二种情况下使用itemgetter是有意义的,因为没有内置的函数复合运算符,所以可以编写int o itemgetter(0)

票数 2
EN

Stack Overflow用户

发布于 2018-07-25 14:01:35

您可以传递一个将列表的第一个元素转换为int再转换为keylambda (未命名函数)。

代码语言:javascript
复制
c = [['29325493', '491963279'], ['665431604', '107866412'],
    ['572747824', '834468627'], ['623075369', '146360674'],
    ['958964458', '525879903'], ['977175138', '523647968'],
    ['689471337', '580279579'], ['664237570', '288339955'],
    ['328743490', '207620319'], ['315386742', '528392695'],
    ['95567418', '163424206'], ['873955477', '450413794'],
    ['7616943', '842564675'], ['575682685', '33126205'],
    ['89779405', '844288987']]
c.sort(key=lambda x: int(x[0]), reverse=True)
print(c)
票数 0
EN

Stack Overflow用户

发布于 2018-07-25 14:09:44

我想,这是你需要的,

代码语言:javascript
复制
from operator import itemgetter


sorted(c, key=itemgetter(0,0))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51511714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档