Python的排序字典的列表,if语句
问题描述:
鉴于这样的词典列表:Python的排序字典的列表,if语句
x = [
{'name':'a', 'student': 1 , 'age':19},
{'name':'b', 'student': 0 , 'age':10}
]
我想年龄只有当学生等于1排序它可以不知何故,我把,如果在以下陈述?
sortedlist = sorted(x, key=lambda k: k['age'])
感谢,
答
如果使用itemgetter +一个生成器,而不是lambda + list comp,您可以获得迄今为止发现的最佳性能。这是在一个10k元素的排行榜上进行测试的。列表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'))
- 备注拉姆达VS itemgetter获得更多的速度:原因itemgetter更快(我对此大部分都很肯定)是因为查找是在代码的C端完成的。而当你使用lambda时,你会在较慢的python端执行它。
答
在这种情况下,你想扔掉那些不等于一个学生:
sortedlist = sorted([x for x in dicts if x['student']==1], key=lambda k:k['age'])
答
如果你是刚刚抛出的值,你可以做像这样:
sorted([d for d in x if d.get('student', 0) == 1], key=itemgetter('age'))
您使用的lambda函数是一个非常常见的操作,可以被替换w ith itemgetter。
而其他的呢? – 2012-03-26 18:56:14
如果学生!= 1,你想做什么?把它扔出去? – istruble 2012-03-26 18:56:27
,你想如何排序不等于1的学生? ,也是lambda必然的? – alonisser 2012-03-26 18:57:15