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

6773

被折叠的 条评论
为什么被折叠?



