生成一个随机数d = {x:randint(60,100)for x in 'ABCXYZ'}
{'A': 91, 'B': 88, 'C': 100, 'X': 79, 'Y': 69, 'Z': 64}
要求按分数大小排序。
如果我们直接使用sorted(d)就会发现排序的结果是按健排序
['A', 'B', 'C', 'X', 'Y', 'Z']
方法一、是使用zip函数把数据转成元组(91,'A')、(88,'B')形式,
先使用d.keys()-->dict_keys(['A', 'B', 'C', 'X', 'Y', 'Z'])、d.values()-->dict_values([91, 88, 100, 79, 69, 64])字典拆出来,然后再使用zip函数,list(zip(d.values(),d.keys()))得到
[(91, 'A'), (88, 'B'), (100, 'C'), (79, 'X'), (69, 'Y'), (64, 'Z')]
使用 sorted(zip(d.values(),d.keys()))就可以得到想要的结果。
[(64, 'Z'), (69, 'Y'), (79, 'X'), (88, 'B'), (91, 'A'), (100, 'C')]
方法二、 使用给sorted方法的第二个参数传一个自己的方法
sorted(d.items(),key=lambda x:x[1])
[('Z', 64), ('Y', 69), ('X', 79), ('B', 88), ('A', 91), ('C', 100)]
我觉得第二种写法更好