python 集合排序

1. 对list中元素是dict的

a. 按照dict中每某一个key值进行排序

lst = [{'high': 19, 'star': 41, 'time': 1},
       {'high': 21, 'star': 40, 'time': 2},
       {'high': 19, 'star': 40, 'time': 3},
       {'high': 22, 'star': 40, 'time': 4},
       {'high': 20, 'star': 40, 'time': 5},
       {'high': 18, 'star': 40, 'time': 1}]
lst.sort(key=lambda k: (k.get('high')))
# lst.sort(key=lambda k: (k.get('high'), k.get('star')))
print(lst)

按照high字段排序,结果输出:

 b. 按照dict中多个key值进行排序

lst.sort(key=lambda k: (k.get('high'), k.get('star')))

结果: 

 2. 对dict进行排序、

a. 按照键进行排序

lst = {'A': 19, 'B': 41, 'C': 1, 'D': 1, 'E': 40, 'F': 2}
lst_sort = sorted(lst.items(), key=lambda k: k[0])

结果:

 b. 按照值进行排序

lst_sort = sorted(lst.items(), key=lambda k: k[1])

结果: 

 c. 先按照键,再按照值进行排序

lst_sort = sorted(lst.items(), key=lambda k: (k[1], k[0]))

结果: 

2. 对多重dict进行排序

lst = {'A': {'high': 2, 'low': 3}, 'B': {'high': 1, 'low': 3}, 'C': {'high': 1, 'low': 4}, 'D': {'high': 2, 'low': 5},
       'E': {'high': 4, 'low': 6}, 'F': {'high': 4, 'low': 10}}



open_weight_sorted = sorted(lst.items(), key=lambda k: (k[1]['high'], k[1]['low']), reverse=True)
# lst_sort = sorted(lst.items(), key=lambda k: (k[1], k[0]))
print(open_weight_sorted)

结果:

[('F', {'high': 4, 'low': 10}), ('E', {'high': 4, 'low': 6}), ('D', {'high': 2, 'low': 5}), ('A', {'high': 2, 'low': 3}), ('C', {'high': 1, 'low': 4}), ('B', {'high': 1, 'low': 3})]

 第2种写法:

open_weight_sorted = sorted(lst,
                            key=lambda k: (lst[k]['high'],lst[k]['low']),
                            reverse=True)

print(open_weight_sorted)

结果:输出的只是key值

 

总结:sorted()中的第一项是一个可迭代的数据,如果是字典,则其中lambda之后的每一项k代表key值,如果是list,那么k就是list中的每一项,items()的结果是一个list,其中每项为元组,所需要通过[0]、【1】索引去访问,这就是两种写法的不同,本质上是一样的

  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值