如何按特定键的值对词典列表进行排序?鉴于:
[{'name': 'Homer', 'age': 39}, {'name': 'Bart', 'age': 10}]
按名称排序时,应为:
[{'name': 'Bart', 'age': 10}, {'name': 'Homer', 'age': 39}]
如何按特定键的值对词典列表进行排序?鉴于:
[{'name': 'Homer', 'age': 39}, {'name': 'Bart', 'age': 10}]
按名称排序时,应为:
[{'name': 'Bart', 'age': 10}, {'name': 'Homer', 'age': 39}]
当前回答
我猜你的意思是:
[{'name':'Homer', 'age':39}, {'name':'Bart', 'age':10}]
其排序如下:
sorted(l,cmp=lambda x,y: cmp(x['name'],y['name']))
其他回答
my_list = [{'name':'Homer', 'age':39}, {'name':'Bart', 'age':10}]
my_list.sort(lambda x,y : cmp(x['name'], y['name']))
my_list现在将是您想要的。
或者更好:
自从Python2.4以来,有一个关键的论点更高效、更整洁:
my_list = sorted(my_list, key=lambda k: k['name'])
…lambda比operator.itemgetter更容易理解,但您的里程数可能会有所不同。
您可以使用以下选项:
lst = [{'name': 'Homer', 'age': 39}, {'name': 'Bart', 'age': 10}]
sorted_lst = sorted(lst, key=lambda x: x['age']) # change this to sort by a different field
print(sorted_lst)
按多个列排序,其中一些列按降序排序:cmps数组是cmp函数的全局数组,包含字段名,对于desc,inv==-1,对于asc
def cmpfun(a, b):
for (name, inv) in cmps:
res = cmp(a[name], b[name])
if res != 0:
return res * inv
return 0
data = [
dict(name='alice', age=10),
dict(name='baruch', age=9),
dict(name='alice', age=11),
]
all_cmps = [
[('name', 1), ('age', -1)],
[('name', 1), ('age', 1)],
[('name', -1), ('age', 1)],]
print 'data:', data
for cmps in all_cmps: print 'sort:', cmps; print sorted(data, cmpfun)
如@Claudiu对@monojohnny在本回答的评论部分所示,给出:
list_to_be_sorted = [
{'name':'Homer', 'age':39},
{'name':'Milhouse', 'age':10},
{'name':'Bart', 'age':10}
]
按关键字“age”、“name”对词典列表进行排序(如SQL语句ORDER BY age,name),可以使用:
newlist = sorted( list_to_be_sorted, key=lambda k: (k['age'], k['name']) )
或者,同样
import operator
newlist = sorted( list_to_be_sorted, key=operator.itemgetter('age','name') )
打印(新列表)
〔{‘name’:‘Bart’,‘age’:10},{‘ame’:‘Milhouse’,‘age’:10〕,{‘name’:‘Homer’,‘age’:39}〕
您可以使用自定义比较函数,也可以传入计算自定义排序键的函数。这通常更有效,因为每个项只计算一次键,而比较函数将被调用多次。
你可以这样做:
def mykey(adict): return adict['name']
x = [{'name': 'Homer', 'age': 39}, {'name': 'Bart', 'age':10}]
sorted(x, key=mykey)
但是标准库包含一个获取任意对象项的通用例程:itemgetter。因此,请尝试以下操作:
from operator import itemgetter
x = [{'name': 'Homer', 'age': 39}, {'name': 'Bart', 'age':10}]
sorted(x, key=itemgetter('name'))