协慌网

登录 贡献 社区

如何按字典值对字典列表进行排序?

我有一个字典列表,希望每个项目按特定的属性值排序。

考虑下面的数组,

[{'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,因为它依赖于将值转换为单个字符串表示以进行比较,但它对于包含负数的数字的预期工作(尽管如果使用数字,则需要使用零填充来适当地格式化字符串)