首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python使用if语句对字典列表进行排序

Python使用if语句对字典列表进行排序
EN

Stack Overflow用户
提问于 2012-03-27 02:54:09
回答 3查看 5.6K关注 0票数 2

给出一个如下的字典列表:

代码语言:javascript
运行
复制
x = [
        {'name':'a', 'student': 1 , 'age':19}, 
        {'name':'b', 'student': 0 , 'age':10}
    ]

我只想在学生等于1的情况下按年龄排序,我可以在下面的语句中加上if吗?

代码语言:javascript
运行
复制
sortedlist = sorted(x, key=lambda k: k['age'])

谢谢,

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-27 03:21:11

如果你使用itemgetter +一个生成器,而不是lambda + list comp,你会得到我迄今为止发现的最好的性能。这是在10k个元素的字典列表上测试的。几乎比list comp + lambda提高了30%的速度。此外,如果您可以安全地假设'student‘始终是一个有效的密钥并直接访问它,那么您将再次获得比使用d.get('student', 0) == 1更快的速度

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

sorted((d for d in x if d['student']==1), key=itemgetter('age'))

  • 关于lambda vs itemgetter的注意:itemgetter更快的原因(这一点我很确定)是因为查找是在代码的C端完成的。然而,当您使用lambda时,您是在Python端执行此操作,这会更慢。
票数 9
EN

Stack Overflow用户

发布于 2012-03-27 03:09:56

如果你只是丢弃这些值,你可以这样做:

代码语言:javascript
运行
复制
sorted([d for d in x if d.get('student', 0) == 1], key=itemgetter('age'))

您使用的lambda函数是一个非常常见的操作,可以用itemgetter替换它。

票数 2
EN

Stack Overflow用户

发布于 2012-03-27 03:04:05

在你想剔除不等于1的学生的情况下:

代码语言:javascript
运行
复制
sortedlist = sorted([x for x in dicts if x['student']==1], key=lambda k:k['age'])
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9877976

复制
相关文章

相似问题

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