python【4】根据字典中值的大小,对字典的键进行排序

案例 以字典来储存某些数据,比如学生成绩,各楼盘房价等 {'a':'29','b':'34','c':'30'}按照值的大小进行排序成{'b':34,'c':30,'a':29}

我们知道 字典是无序的,键也是唯一的,值可以重复。查找字典中的数据时按照字典的键进行查找的。

涉及到排序问题,首先想到了python的内置函数sorted ,比如 对列表进行排序 ,像这样:

from random import randint 
list=[randint(10,50) for x in range(6)]
print(list)
print(sorted(list))

python【4】根据字典中值的大小,对字典的键进行排序_第1张图片

排序的结果是对列表按照从小到大来排列

那么是不是也可以使用sorted方法对字典进行排序呢  来试一下:

结果是这样的 ,只对字典的键进行了排序 ,是按照键的ASCii码来排列的 ,不是按照值,何况结果中连值都没有展示出来。

python【4】根据字典中值的大小,对字典的键进行排序_第2张图片

所以直接使用sorted 函数对字典按照值得大小来排序是行不通的 。那么 需要展示的结果应该是包含值和键的 ,想到了元组(a,34)>(a,35)  对元组进行比较大小 ,而如果把键放在第一个的话,还是比较的键的大小,而不是值,所以 需要把值放在第一个,键放在后面。思路来了,把字典的数据转换为元祖  使用zip函数。zip(值,键),

想得到字典的值和键 非常简单 即d.keys()和d.values() 

zip(d.values(),d.keys())就把字典数据转换成了元组数据。

代码如下  结果如下:

python【4】根据字典中值的大小,对字典的键进行排序_第3张图片

奇怪,打印出来的排序结果为什么是是这样一串东西呢 ,因为用的解释器的版本是3.6  对zip的用法做了修改,可以看到返回的是一个对象,如果想要得到list可以用list(b),进行强转,得到想要的结果。如下:

python【4】根据字典中值的大小,对字典的键进行排序_第4张图片

看 这样就按照字典的大小顺序来进行排列的。

 

 

你可能感兴趣的:(python)