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

时间:2012-03-26 18:54:09

标签: python list sorted

给出这样的词典列表:

x = [
        {'name':'a', 'student': 1 , 'age':19}, 
        {'name':'b', 'student': 0 , 'age':10}
    ]

如果学生等于1,我想按年龄对其进行排序。如果在下面的陈述中,我能以某种方式表达吗?

sortedlist = sorted(x, key=lambda k: k['age'])

谢谢,

3 个答案:

答案 0 :(得分:7)

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

from operator import itemgetter

sorted((d for d in x if d['student']==1), key=itemgetter('age'))
  • 关于lambda vs itemgetter的注意事项:itemgetter的原因更快(我对此非常肯定)是因为查找是在代码的C端完成的。然而,当你使用lambda时,你在python那边做得很慢。

答案 1 :(得分:2)

如果你只是抛出这些值,你可以这样做:

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

您正在使用的lambda函数是一种非常常见的操作,可以替换为itemgetter

答案 2 :(得分:1)

如果你想要抛弃不等于一的学生:

sortedlist = sorted([x for x in dicts if x['student']==1], key=lambda k:k['age'])