Python中关于列表里的字典元素排序问题

使用sorted()函数对列表中的字典元素按值排序

在由字典(dict)元素组成的列表(list)里,根据字典的某个key排序list中的所有元素.

sorted高阶函数语法格式:sorted(可迭代对象,key=函数名,reverse=False/True)

sorted排序方法的详细解释:
  • 作用:从可迭代对象中,依次取出一个元素,该元素再按照key规定的排列依据排序。
  • 可迭代对象:即可依次取值的对象,例如:集合,序列(列表,字符串,元组),字典等。
  • key : 是列表排列的依据,一般可以自定义一个函数返回排序的依据,再把函数名绑定给key。
  • reverse : 译为反转,reverse默认等于False,从小到大排序。等于True时,从大到小排序。
  • 匿名函数lambda的格式: 函数名 = lambda [形参1,形参2,…] : ,返回操作语句块产生的结果并绑定给函数名。

例如key=lambda x : x[1]

  • x: 相当于字典集合中的一个元组, 例:dict_items([(‘a’, 1), (‘c’, 3), (‘b’, 2)])中的(‘a’, 1)或(‘c’, 3)或(‘b’, 2)
  • x[1]: 返回x中的第二个元素,即键值对元组中的值。dict_items([(‘a’, 1), (‘c’, 3), (‘b’, 2)])中的1或2或3

注意

(1) sorted函数中的可迭代对象不要用字典d,那样只能迭代出的字典d的键。要用d.items()才可迭代出字典的键值对。
例:不能用 d_order=sorted(d,key=lambda x:x[1],reverse=False),
要用 d_order=sorted(d.items(),key=lambda x:x[1],reverse=False)。

(2) sorted函数排好序后,要绑定一个对象(赋值),例:d_order=sorted(d.items(),key=lambda x:x[1],reverse=False)
因为字典是无序类型,用sorted函数排好序后不绑定d_order,字典会自动打乱顺序。

动手试一试

例1:

list = [{"day":2},{"day":1},{"day":3}]
print("list: ", list)
new_list = sorted(list, key=lambda k: k['day'])
print("sorted_list: ",new_list)

例2:

info = [{'x': 4020, 'y': 9962, 'w': 28, 'h': 239, 'p': 0.10}, {'x': 20354, 'y': 24820, 'w': 434, 'h': 455, 'p': 0.15}, {'x': 12434, 'y': 19812, 'w': 585, 'h': 77, 'p': 0.88}, {'x': 15488, 'y': 18871, 'w': 584, 'h': 649, 'p': 0.72399}, {'x': 4026, 'y': 18528, 'w': 165, 'h': 302, 'p': 0.17}, {'x': 15003, 'y': 6246, 'w': 615, 'h': 197, 'p': 0.10}, {'x': 9292, 'y': 5370, 'w': 84, 'h': 670, 'p': 0.67}, {'x': 18775, 'y': 22074, 'w': 659, 'h': 711, 'p': 0.43}] 
print("list: ",info)
new_info = sorted(info, key=lambda k: k['p'], reverse=True)
print("sorted_list: ",new_info)

参考

[1] https://blog.csdn.net/cxcxrs/article/details/82459800
[2] https://zhidao.baidu.com/question/1239629746232186939.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值