如何按特定键的值对词典列表进行排序?鉴于:

[{'name': 'Homer', 'age': 39}, {'name': 'Bart', 'age': 10}]

按名称排序时,应为:

[{'name': 'Bart', 'age': 10}, {'name': 'Homer', 'age': 39}]

当前回答

sorted()函数接受key=参数

newlist = sorted(list_to_be_sorted, key=lambda d: d['name']) 

或者,您可以使用operator.itemgetter而不是自己定义函数

from operator import itemgetter
newlist = sorted(list_to_be_sorted, key=itemgetter('name')) 

为完整起见,添加reverse=True以降序排序

newlist = sorted(list_to_be_sorted, key=itemgetter('name'), reverse=True)

其他回答

import operator
a_list_of_dicts.sort(key=operator.itemgetter('name'))

“key”用于按任意值排序,“itemgetter”将该值设置为每个项的“name”属性。

这是另一种通用解决方案——它按键和值对dict的元素进行排序。

它的优点是不需要指定键,如果某些字典中缺少一些键,它仍然可以工作。

def sort_key_func(item):
    """ Helper function used to sort list of dicts

    :param item: dict
    :return: sorted list of tuples (k, v)
    """
    pairs = []
    for k, v in item.items():
        pairs.append((k, v))
    return sorted(pairs)
sorted(A, key=sort_key_func)

我猜你的意思是:

[{'name':'Homer', 'age':39}, {'name':'Bart', 'age':10}]

其排序如下:

sorted(l,cmp=lambda x,y: cmp(x['name'],y['name']))

假设我有一本字典D,其中包含以下元素。要排序,只需使用sorted中的key参数传递自定义函数,如下所示:

D = {'eggs': 3, 'ham': 1, 'spam': 2}
def get_count(tuple):
    return tuple[1]

sorted(D.items(), key = get_count, reverse=True)
# Or
sorted(D.items(), key = lambda x: x[1], reverse=True)  # Avoiding get_count function call

看看这个。

您可以使用以下选项:

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)