python----根据字典内的值实现排序

本文围绕Python排序问题展开,尝试用内置函数sorted对列表和字典排序,发现直接用sorted对字典按值排序行不通。接着尝试将字典数据转换为元组,用zip函数处理,但结果未考虑键值关系。最后换思路实现简单排序,强化版字典套字典排序待解决。

“”"

要求:在这里插入图片描述

2020/11/1,
看了书本130之后的内容,发现还是不会,于是我搜了一篇优秀的博客

no1=dict(name1="余浩然",avg1="80")
no2=dict(name2="吕布",avg2="80")
no3=dict(name="张飞",avg="90")
dir1=dict(no1,**no2)
b=zip(dir1.values(),dir1.keys())
c=list(sorted(b))
print(c)

因为涉及到排序问题,首先想到了python的内置函数sorted ,
比如对列表进行排序 ,排序的结果是对列表按照从小到大来排列

那么是不是也可以使用sorted方法对字典进行排序呢 ,结果只对字典的键进行了排序 ,
是按照键的ASCii码来排列的 ,不是按照值,何况结果中连值都没有展示出来。
所以直接使用sorted 函数对字典按照值得大小来排序是行不通的 。

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

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

zip(b.values(),b.keys())就把字典数据转换成了元组数据。
因为用的解释器的版本是3.7 对zip的用法做了修改,可以看到返回的是一个对象,如果想要得到list可以用list(b),进行强转,得到想要的结果。

但这样得出的结果是
[(‘80’, ‘avg1’), (‘80’, ‘avg2’), (‘余浩然’, ‘name1’), (‘吕布’, ‘name2’)]
只是对字典内的值排序了,但没有考虑到键和值之间的关系
所以我这种想法可能在现阶段,甚至是在目前,没有办法利用一种函数什么的给排序的
所以只能换一个思路:我把余浩然直接当键值使用,把80当做成绩肯定是可以排序的吧代码如下:
“”"

dir1=dict(余浩然="80",张飞="90",吕布="80")
b=zip(dir1.values(),dir1.keys())
c=list(sorted(b,reverse = True))
print(c)

得到结果[(‘80’, ‘余浩然’), (‘80’, ‘吕布’), (‘90’, ‘张飞’)],成功对其排序,但感觉太简单了,不是老师要求的那种

强化版本,字典里面套字典,有想法是好的,可惜这个没法实现,待后续进行解决

 dir1=dict(余浩然={"avg":85,"math":80,"English":90},张飞={"avg":77.5,"math":75,"English":80},吕布={"avg":85,"math":95,"English":75})
 b=zip(dir1.keys())
 c=list(sorted(b,reverse = True))
 print(c)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值