列表中嵌套字典,根据字典的值排序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了列表中嵌套字典,根据字典的值排序相关的知识,希望对你有一定的参考价值。

格式:
数据类型为列表,列表元素为字典。由字典组织的列表形式。

分析:
可以将列表中的字典先放入到一个大字典中,对整个字典进行排序,在排序完成后,再转换为列表包含字典的形式即可

现在有一个列表,根据每个字典的值进行排序。

dict_list = ["ming": 87, "mei": 93, "hua": 68, "jon": 75, "ston": 100, "jack": 56]

思路:可以将列表中的字典先放入到一个大字典中,对整个字典进行排序,在排序完成后,再转换为列表包含字典的形式即可。

from operator import itemgetter
dict_list = ["ming": 87, "mei": 93, "hua": 68, "jon": 75, "ston": 100, "jack": 56]
mid_dict = key: value for x in dict_list for key, value in x.items()
mid_list = sorted(mid_dict.items(), key=itemgetter(1))
fin_list = [x[0]: x[1] for x in mid_list]
例子:T=[‘xgei-0/0/1/1‘: ‘9‘, ‘xgei-0/0/1/2‘: ‘20‘,‘xgei-0/0/1/15‘: ‘12‘]
def Sorted_listdict(dict_list ):
    New_List=[]
    New_D=
    mid_dict = key: value for x in dict_list for key, value in x.items()  ###格式写法。列表与字典的结构
    #print (mid_dict)
    ordered_dict = OrderedDict(sorted(mid_dict.items(), key=lambda t: int(t[1]), reverse=True))
    #print (type(ordered_dict),ordered_dict)
    #<class ‘collections.OrderedDict‘> OrderedDict([(‘xgei-0/0/1/2‘, ‘20‘), (‘xgei-0/0/1/15‘, ‘12‘), (‘xgei-0/0/1/1‘, ‘9‘)])
    for x in ordered_dict:
        New_D[x]=mid_dict[x]
    New_List.append(New_D)
    print (New_List)
    return New_List

1.sorted函数按key值对字典排序
先来基本介绍一下sorted函数,sorted(iterable,key,reverse),sorted一共有iterable,key,reverse这三个参数。
其中iterable表示可以迭代的对象,例如可以是 dict.items()、dict.keys()等,key是一个函数,用来选取参与比较的元素,reverse则是用来指定排序是倒序还是顺序,reverse=true则是倒序,reverse=false时则是顺序,默认时reverse=false。
要按key值对字典排序,则可以使用如下语句:

>>> dict2=
... ‘11‘: ‘RX‘: ‘-11‘, ‘TX‘: ‘-11‘,
... ‘1‘: ‘RX‘: ‘-1‘, ‘TX‘: ‘-1‘,
... ‘2‘: ‘RX‘: ‘-2‘, ‘TX‘: ‘-2‘,
... ‘3‘: ‘RX‘: ‘-3‘, ‘TX‘: ‘-3‘,
... ‘20‘: ‘RX‘: ‘-20‘, ‘TX‘: ‘-20‘,
... ‘4‘: ‘RX‘: ‘-4‘, ‘TX‘: ‘-4‘,
... ‘5‘: ‘RX‘: ‘-5‘, ‘TX‘: ‘-5‘,
... ‘30‘: ‘RX‘: ‘-30‘, ‘TX‘: ‘-30‘,
... ‘6‘: ‘RX‘: ‘-6‘, ‘TX‘: ‘-6‘,
... ‘7‘: ‘RX‘: ‘-7‘, ‘TX‘: ‘-7‘
...  
>>> sorted(dict2.keys())
[‘1‘, ‘11‘, ‘2‘, ‘20‘, ‘3‘, ‘30‘, ‘4‘, ‘5‘, ‘6‘, ‘7‘]
直接使用sorted(d.keys())就能按key值对字典排序,这里是按照顺序对key值排序的,如果想按照倒序排序的话,则只要将reverse置为true即可。

2.sorted函数按value值对字典排序
要对字典的value排序则需要用到key参数,在这里主要提供一种使用lambda表达式的方法,如下:

>>> sorted(dict2.items(),key=lambda i:i[0])
[(‘1‘, ‘RX‘: ‘-1‘, ‘TX‘: ‘-1‘), (‘11‘, ‘RX‘: ‘-11‘, ‘TX‘: ‘-11‘), (‘2‘, ‘RX‘: ‘-2‘, ‘TX‘: ‘-2‘), (‘20‘, ‘RX‘: ‘-20‘, ‘TX‘: ‘-20‘), (‘3‘, ‘RX‘: ‘-3‘, ‘TX‘: ‘-3‘), (‘30‘, ‘RX‘: ‘-30‘, ‘TX‘: ‘-30‘), (‘4‘, ‘RX‘: ‘-4‘, ‘TX‘: ‘-4‘), (‘5‘, ‘RX‘: ‘-5‘, ‘TX‘: ‘-5‘), (‘6‘, ‘RX‘: ‘-6‘, ‘TX‘: ‘-6‘), (‘7‘, ‘RX‘: ‘-7‘, ‘TX‘: ‘-7‘)]
>>> sorted(dict2.items(),key=lambda i:int(i[0]))
[(‘1‘, ‘RX‘: ‘-1‘, ‘TX‘: ‘-1‘), (‘2‘, ‘RX‘: ‘-2‘, ‘TX‘: ‘-2‘), (‘3‘, ‘RX‘: ‘-3‘, ‘TX‘: ‘-3‘), (‘4‘, ‘RX‘: ‘-4‘, ‘TX‘: ‘-4‘), (‘5‘, ‘RX‘: ‘-5‘, ‘TX‘: ‘-5‘), (‘6‘, ‘RX‘: ‘-6‘, ‘TX‘: ‘-6‘), (‘7‘, ‘RX‘: ‘-7‘, ‘TX‘: ‘-7‘), (‘11‘, ‘RX‘: ‘-11‘, ‘TX‘: ‘-11‘), (‘20‘, ‘RX‘: ‘-20‘, ‘TX‘: ‘-20‘), (‘30‘, ‘RX‘: ‘-30‘, ‘TX‘: ‘-30‘)]
>>>

这里的d.items()实际上是将d转换为可迭代对象,
迭代对象的元素为 (‘1‘, ‘RX‘: ‘-1‘, ‘TX‘: ‘-1‘), (‘2‘, ‘RX‘: ‘-2‘, ‘TX‘: ‘-2‘), (‘3‘, ‘RX‘: ‘-3‘, ‘TX‘: ‘-3‘), (‘4‘, ‘RX‘: ‘-4‘, ‘TX‘: ‘-4‘), (‘5‘, ‘RX‘: ‘-5‘, ‘TX‘: ‘-5‘), (‘6‘, ‘RX‘: ‘-6‘, ‘TX‘: ‘-6‘), (‘7‘, ‘RX‘: ‘-7‘, ‘TX‘: ‘-7‘), (‘11‘, ‘RX‘: ‘-11‘, ‘TX‘: ‘-11‘), (‘20‘, ‘RX‘: ‘-20‘, ‘TX‘: ‘-20‘), (‘30‘, ‘RX‘: ‘-30‘, ‘TX‘: ‘-30‘),items()方法将字典的元素 转化为了元组,
而这里key参数对应的lambda表达式的意思则是选取元组中的第二个元素作为比较参数(如果写作key=lambda item:item[0]的话则是选取第一个元素作为比较对象,
也就是key值作为比较对象。lambda x:y中x表示输出参数,y表示lambda 函数的返回值),所以采用这种方法可以对字典的value进行排序。
注意排序后的返回值是一个list,而原字典中的名值对被转换为了list中的元组。

3、使用OrderDict函数排序(一般适用于python3以上,该函数为3新增)

>>> dict1=
... ‘11‘: ‘RX‘: ‘-11‘, ‘TX‘: ‘-11‘,
... ‘1‘: ‘RX‘: ‘-1‘, ‘TX‘: ‘-1‘,
... ‘2‘: ‘RX‘: ‘-2‘, ‘TX‘: ‘-2‘,
... ‘3‘: ‘RX‘: ‘-3‘, ‘TX‘: ‘-3‘,
... ‘20‘: ‘RX‘: ‘-20‘, ‘TX‘: ‘-20‘,
... ‘4‘: ‘RX‘: ‘-4‘, ‘TX‘: ‘-4‘,
... ‘5‘: ‘RX‘: ‘-5‘, ‘TX‘: ‘-5‘,
... ‘30‘: ‘RX‘: ‘-30‘, ‘TX‘: ‘-30‘,
... ‘6‘: ‘RX‘: ‘-6‘, ‘TX‘: ‘-6‘,
... ‘7‘: ‘RX‘: ‘-7‘, ‘TX‘: ‘-7‘
...  
>>> from collections import OrderedDict
>>> ordered_dict = OrderedDict(sorted(dict1.items(), key=lambda t: t[0]))
>>> print (ordered_dict)
OrderedDict([(‘1‘, ‘RX‘: ‘-1‘, ‘TX‘: ‘-1‘), (‘11‘, ‘RX‘: ‘-11‘, ‘TX‘: ‘-11‘), (‘2‘, ‘RX‘: ‘-2‘, ‘TX‘: ‘-2‘), (‘20‘, ‘RX‘: ‘-20‘, ‘TX‘: ‘-20‘), (‘3‘, ‘RX‘: ‘-3‘, ‘TX‘: ‘-3‘), (‘30‘, ‘RX‘: ‘-30‘, ‘TX‘: ‘-30‘), (‘4‘, ‘RX‘: ‘-4‘, ‘TX‘: ‘-4‘), (‘5‘, ‘RX‘: ‘-5‘, ‘TX‘: ‘-5‘), (‘6‘, ‘RX‘: ‘-6‘, ‘TX‘: ‘-6‘), (‘7‘, ‘RX‘: ‘-7‘, ‘TX‘: ‘-7‘)])
>>> new_ordered_dict = OrderedDict(sorted(dict1.items(), key=lambda t: int(t[0])))
>>> print (new_ordered_dict)
OrderedDict([(‘1‘, ‘RX‘: ‘-1‘, ‘TX‘: ‘-1‘), (‘2‘, ‘RX‘: ‘-2‘, ‘TX‘: ‘-2‘), (‘3‘, ‘RX‘: ‘-3‘, ‘TX‘: ‘-3‘), (‘4‘, ‘RX‘: ‘-4‘, ‘TX‘: ‘-4‘), (‘5‘, ‘RX‘: ‘-5‘, ‘TX‘: ‘-5‘), (‘6‘, ‘RX‘: ‘-6‘, ‘TX‘: ‘-6‘), (‘7‘, ‘RX‘: ‘-7‘, ‘TX‘: ‘-7‘), (‘11‘, ‘RX‘: ‘-11‘, ‘TX‘: ‘-11‘), (‘20‘, ‘RX‘: ‘-20‘, ‘TX‘: ‘-20‘), (‘30‘, ‘RX‘: ‘-30‘, ‘TX‘: ‘-30‘)])
>>> type(ordered_dict)       ##返回有序字典
<class ‘collections.OrderedDict‘>

以上是关于列表中嵌套字典,根据字典的值排序的主要内容,如果未能解决你的问题,请参考以下文章

列表嵌套字典,根据字典某一key排序

使用列表中的项目更改嵌套字典的字典中的值?

根据列表中字典中的某个value排序

学不会的python之通过某几个关键字排序分组一个字典列表(列表中嵌套字典)

学不会的python之通过某几个关键字排序分组一个字典列表(列表中嵌套字典)

如何首先根据其单位(bit/s、Kbit/s 等)对特定的字典列表进行排序,然后根据它们的值对它们进行排序