2

给定这样的字典列表:

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

只有当学生等于1时,我才想按年龄对其进行排序。我可以以某种方式将它放在下面的语句中吗?

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

谢谢,

4

3 回答 3

9

如果您使用 itemgetter + 生成器,而不是 lambda + list comp,您将获得迄今为止我发现的最佳性能。这是在 10k 个元素的 dicts 列表上测试的。与 list 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 与 itemgetter 的注意事项: itemgetter 更快的原因(我对此很确定)是因为查找是在代码的 C 端完成的。而当您使用 lambda 时,您是在较慢的 python 端执行此操作。
于 2012-03-26T19:21:11.340 回答
2

如果您只是丢弃值,则可以执行以下操作:

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

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

于 2012-03-26T19:09:56.073 回答
1

如果您想丢弃不等于一的学生:

sortedlist = sorted([x for x in dicts if x['student']==1], key=lambda k:k['age'])
于 2012-03-26T19:04:04.650 回答