我有一个字典列表,希望每个项目按特定的属性值排序。
考虑下面的数组,
[{'name':'Homer', 'age':39}, {'name':'Bart', 'age':10}]
按name
排序时,应该成为
[{'name':'Bart', 'age':10}, {'name':'Homer', 'age':39}]
使用密钥而不是 cmp 可能看起来更干净:
newlist = sorted(list_to_be_sorted, key=lambda k: k['name'])
或者作为 JFSebastian 和其他人的建议,
from operator import itemgetter
newlist = sorted(list_to_be_sorted, key=itemgetter('name'))
为了完整性(如 fitzgeraldsteele 的评论中所指出的),添加reverse=True
以降序排序
newlist = sorted(l, key=itemgetter('name'), reverse=True)
import operator
要按 key ='name' 对字典列表进行排序:
list_of_dicts.sort(key=operator.itemgetter('name'))
按键 ='年龄' 对字典列表进行排序:
list_of_dicts.sort(key=operator.itemgetter('age'))
如果要按多个键对列表进行排序,可以执行以下操作:
my_list = [{'name':'Homer', 'age':39}, {'name':'Milhouse', 'age':10}, {'name':'Bart', 'age':10} ]
sortedlist = sorted(my_list , key=lambda elem: "%02d %s" % (elem['age'], elem['name']))
它相当 hackish,因为它依赖于将值转换为单个字符串表示以进行比较,但它对于包含负数的数字的预期工作(尽管如果使用数字,则需要使用零填充来适当地格式化字符串)