如何根据字典中值的大小对于字典中的项排序
2018-12-18 本文已影响0人
以七v为书
问题
某班英语成绩以字典形式存储为{'abbo',100,'faa':'100','aimi':59}
根据成绩高低计算学生排名
解决方案:
- 利用zip将字典数据转换为元组
- 传递sorted函数的key参数
按值对字典排序
普通做法:
from random import randint
dic = {x:randint(60,100) for x in 'zxcvbnm'}
print(dic)
skey = sorted(dic)
print skey
print iter(dic)
print list(iter(dic))
# 将字典进行转换变成sorted可以排序的
print (97,'a') > (69,'b')
print (97,'a') > (97,'b')
print dic.keys()
print dic.values()
print zip(dic.keys(),dic.values())
#进行优化内存使用可迭代对象
print zip(dic.itervalues(),dic.iterkeys())
print sorted(zip(dic.itervalues(),dic.iterkeys()))
利用sorted的key传值
sorted 传入三个参数:
1:一个可迭代的对象
2:key值:这里传入一个lambda匿名函数。取出每个迭代项的values
3:reverse:正序还是倒序:默认为False从小到大
print dic.items()
# 从小到大排列
print sorted(dic.items(), key=lambda x:x[1])
# 从大到小排列
print sorted(dic.items(), key=lambda x:x[1],reverse =True)
##优化内存版本
# 从小到大排列
print sorted(dic.iteritems(), key=lambda x:x[1])
# 从大到小排列
print sorted(dic.iteritems(), key=lambda x:x[1],reverse =True)