如何按值[重复]对字典词典列表进行排序(How to sort a list of dictionaries of dictionaries by value [duplicate])

这个问题在这里已有答案:

如何按Python中字典的值对字典列表进行排序? 17个答案

我有一个dict的dict list ,如下所示:

mydic = [{'name':'a', 'loc':{'locname':'z'}, 'id':{'value':'1'}},{'name':'b', 'loc':{'locname':'o'}, 'id':{'value':'2'}}]

我如何按locname排序? 我应该得到这个:

mydic_sorted = [{'name':'b', 'loc':{'locname':'o'}, 'id':{'value':'2'}}, {'name':'a', 'loc':{'locname':'z'}, 'id':{'value':'1'}}]

This question already has an answer here:

How do I sort a list of dictionaries by a value of the dictionary? 16 answers

I have a list of dicts of dicts like this:

mydic = [{'name':'a', 'loc':{'locname':'z'}, 'id':{'value':'1'}},{'name':'b', 'loc':{'locname':'o'}, 'id':{'value':'2'}}]

How do I sort it by locname? I should get this:

mydic_sorted = [{'name':'b', 'loc':{'locname':'o'}, 'id':{'value':'2'}}, {'name':'a', 'loc':{'locname':'z'}, 'id':{'value':'1'}}]

最满意答案

您可以使用lambda函数作为函数的key参数

>>> mydic = [{'name':'a', 'loc':{'locname':'z'}, 'id':{'value':'1'}},{'name':'b', 'loc':{'locname':'o'}, 'id':{'value':'2'}}] >>> sorted(mydic,key = lambda x:x['loc']['locname']) [{'loc': {'locname': 'o'}, 'name': 'b', 'id': {'value': '2'}}, {'loc': {'locname': 'z'}, 'name': 'a', 'id': {'value': '1'}}]

参考: 文档

sorted(iterable[, cmp[, key[, reverse]]])

key指定一个参数的函数,该函数用于从每个列表元素中提取比较键: key=str.lower 。 默认值为None (直接比较元素)。

You can by using a lambda function as a key argument to the function

>>> mydic = [{'name':'a', 'loc':{'locname':'z'}, 'id':{'value':'1'}},{'name':'b', 'loc':{'locname':'o'}, 'id':{'value':'2'}}] >>> sorted(mydic,key = lambda x:x['loc']['locname']) [{'loc': {'locname': 'o'}, 'name': 'b', 'id': {'value': '2'}}, {'loc': {'locname': 'z'}, 'name': 'a', 'id': {'value': '1'}}]

Ref: The docs

sorted(iterable[, cmp[, key[, reverse]]])

key specifies a function of one argument that is used to extract a comparison key from each list element: key=str.lower. The default value is None (compare the elements directly).

更多推荐