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

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

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

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

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‘>

原文地址:https://blog.51cto.com/chier11/2415974

时间: 2024-08-08 15:23:42

列表中嵌套字典,根据字典的值排序的相关文章

Java--&gt;吧把txt中的所有字符按照码表值排序

--> List 列表中的自动添加的多余空间长度该怎么去除呢?... package com.dragon.java.filesort; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; /* * 将day19-

js代码中嵌套jsp页面传递的值引起的安全问题

在jsp相互间传值,我们经常用string str=request.getParameter("st");这种方式来获取值,然后再在js代码中引入 var str=<% str%> 这么写会有安全问题,用fortify软件就能测出问题.提示跨域安全问题,其实不跨域也可以解决这种问题,把变量放到request域中,用el表达式来获取 这么写: string str=request.getParameter("st");request.setAttribut

python之enumerate函数:获取列表中每个元素的索引和值

源码举例: 1 def enumerate_fn(): 2 ''' 3 enumerate函数:获取每个元素的索引和值 4 :return:打印每个元素的索引和值 5 ''' 6 list = ['Mike', 'male', '24'] 7 for index, value in enumerate(list): 8 print("索引:" + str(index), ", 值:" + value) 9 10 11 enumerate_fn() 运行结果: 索引:

关联数组中根据某个某个字段的值排序

$tempArr = array(); foreach($arr as $key=>$v){ $tempArr[$key]['clue'] = $v['clue'];//所要排序的字段 } //根据字段的值从大到小排序 array_multisort($tempArr,SORT_DESC,$arr); 原文地址:https://www.cnblogs.com/jackzhuo/p/11797773.html

for循环将字典添加到列表中出现覆盖前面数据的问题

user_list = []dic = {}for i in range(3): username = input("用户名") password = input("密码") dic["用户名"]=username dic["密码"]=password user_list.append(dic)print(user_list)结果 用户名1密码2用户名3密码4用户名5密码6[{'用户名': '5', '密码': '6'}, {

Python List count()方法-用于统计某个元素在列表中出现的次数

描述 count() 方法用于统计某个元素在列表中出现的次数. 语法 count()方法语法: list.count(obj) 参数 obj -- 列表中统计的对象. 返回值 返回元素在列表中出现的次数. 实例 以下实例展示了 count()函数的使用方法: #!/usr/bin/python aList = [123, 'xyz', 'zara', 'abc', 123]; print "Count for 123 : ", aList.count(123); print "

Python列表操作与深浅拷贝(7)——列表深浅拷贝、删除、反转、排序

列表复制 浅拷贝:简单类型元素全复制,引用类型元素只复制引用 L1 = [3,2,1,[4,5,6],8,'abc'] L1 [3, 2, 1, [4, 5, 6], 8, 'abc'] L2 = L1.copy() L2 [3, 2, 1, [4, 5, 6], 8, 'abc'] L1[3][1] = 10 #修改L1中的元素L2也随之变化 L1 [3, 2, 1, [4, 10, 6], 8, 'abc'] L2 [3, 2, 1, [4, 10, 6], 8, 'abc'] 深拷贝:co

1.6 字典中的键映射多个值

body, td { font-family: 微软雅黑; font-size: 10pt; } Edit 1.6 字典中的键映射多个值 问题 实现一个字典结构,一个键可以对应多个值 解决方案 1.列表和集合 1.>>> d2.{'b': [4, 5], 'a': [1, 2, 3]}3.>>> d['b']4.[4, 5]5.>>> e={'a':{1,2,2,3},'b':{2,3,4,4}}6.>>> e7.{'b': {2,

Python中的列表、元祖、字典

一.列表 一组有序项目的集合.可变的数据类型[可进行增删改查] 列表是以方括号"[]"包围的数据集合,不同成员以","分隔. 列表中能够包括不论什么数据类型,也可包括还有一个列表 列表可通过序号訪问当中成员 经常使用列表操作: list.append()追加成员.成员数据 list.pop()删除成员,删除第i个成员 list.count(x)计算列表中參数x出现的次数 list.remove()删除列表中的成员.直接删除成员i list.extend(L)向列表中