python使用sorted()对字典按key或者value进行排序

使用到了python的内建函数sorted()与lambda函数。

1.sorted函数

首先介绍sorted函数,sorted(iterable,key,reverse),sorted一共有iterable,key,reverse这三个参数。

其中iterable表示可以迭代的对象,例如可以是dict.items()、dict.keys()等,key是一个函数,用来选取参与比较的元素,reverse则是用来指定排序是倒序还是顺序,reverse=true则是倒序(从大到小),reverse=false则是顺序(从小到大),默认是reverse=false。直接看例子:

# 声明字典
key_value = {}
# 初始化
key_value['一个'] = 56
key_value['二哥'] = 2
key_value['四个'] = 24
key_value['三个'] = 12
print('--key_value: ', key_value)
输出:
--key_value:  {'一个': 56, '二个': 2, '四个': 24, '三个': 12}

2.按照key排序

要对字典按照key排序,可以直接调用sorted函数。

key_value1 = sorted(key_value.keys()) # 默认是正序:从小到大
print('---key_value1: ', key_value1)
---key_value1:  ['一个', '三个', '二个', '四个']

这里只有key,没有value了,如果想要重新组织为字典,那遍历一下key_value:

dict_sort = {}
for key in key_value1:
    dict_sort[key] = key_value[key]
print(dict_sort)
{'一个': 56, '三个': 12, '二个': 2, '四个': 24}

简洁的方式:

key_value1 = sorted(key_value.items(), key=lambda v: v[0])
print('---key_value1: ', key_value1)
---key_value1:  [('一个', 56), ('三个', 12), ('二个', 2), ('四个', 24)]

存在的问题:
数据类型都变了,这个方法将原来的 dict 类型变成了 list 类型。
可以强制转换成dict,前面加个dict()就行了
key_value1 = dict(key_value1)

3.按照value值排序

共有三种方法可以实现将字典按照value值进行排序

(1)key使用lambda匿名函数取value进行排序

# ------------------按照value进行排序,(正序:从小到大)
new_value = sorted(key_value.items(), key=lambda kv:(kv[1], kv[0]))
# new_value = sorted(key_value.items(), key=lambda kv: kv[1], reverse=True)
print('-- new_value: ', new_value)
# ------------------按照value进行排序,(倒序:从大到小)
new_value1 = sorted(key_value.items(), key=lambda kv: kv[1], reverse=True)
print('-- new_value: ',new_value1)

(2)使用operator的itemgetter进行排序

import operator
key_value1 = dict(sorted(key_value.items(), key=operator.itemgetter(1)))
print('---key_value1: ', key_value1)
---key_value1:  {'二个': 2, '三个': 12, '四个': 24, '一个': 56}

(3)将key和value分装成元组,再进行排序

f = zip(key_value.keys(), key_value.values())
c = sorted(f)
print(dict(c))
{'一个': 56, '三个': 12, '二个': 2, '四个': 24}

参考:
https://www.runoob.com/python3/python-sort-dictionaries-by-key-or-value.html
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值