给出一个如下的字典列表:
x = [
{'name':'a', 'student': 1 , 'age':19},
{'name':'b', 'student': 0 , 'age':10}
]我只想在学生等于1的情况下按年龄排序,我可以在下面的语句中加上if吗?
sortedlist = sorted(x, key=lambda k: k['age'])谢谢,
发布于 2012-03-27 03:21:11
如果你使用itemgetter +一个生成器,而不是lambda + list comp,你会得到我迄今为止发现的最好的性能。这是在10k个元素的字典列表上测试的。几乎比list comp + lambda提高了30%的速度。此外,如果您可以安全地假设'student‘始终是一个有效的密钥并直接访问它,那么您将再次获得比使用d.get('student', 0) == 1更快的速度
from operator import itemgetter
sorted((d for d in x if d['student']==1), key=itemgetter('age'))发布于 2012-03-27 03:09:56
如果你只是丢弃这些值,你可以这样做:
sorted([d for d in x if d.get('student', 0) == 1], key=itemgetter('age'))您使用的lambda函数是一个非常常见的操作,可以用itemgetter替换它。
发布于 2012-03-27 03:04:05
在你想剔除不等于1的学生的情况下:
sortedlist = sorted([x for x in dicts if x['student']==1], key=lambda k:k['age'])https://stackoverflow.com/questions/9877976
复制相似问题