使用到了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