列表中嵌套字典,根据字典的值排序
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‘>
以上是关于列表中嵌套字典,根据字典的值排序的主要内容,如果未能解决你的问题,请参考以下文章
学不会的python之通过某几个关键字排序分组一个字典列表(列表中嵌套字典)