题目
实现对一个字典的值进行排序
解析
思路一
sorted 只能对字典的 键进行排序, 吧字典的键,值分开然后重新换个位置进行排序
但是 sorted 对字典排序后的结果就只剩下键了. 因此此方法不行
思路二
基于思路一的问题, 为了解决不会丢失值的问题, 只能吧键和值分开保存,然后在组合在一起
这里使用到了 zip 函数, zip 函数组合成一个元组 ( 值放在前面, 先比较前面的 )
然后在使用 sorted 进行排序, 这样就可以对值进行排序同时保留键值所有数据了
思路三
sorted 的方法带有一个关键词参数 key , 可以指定排序的位置.....你特娘的不早说
字典的 items方法的返回值本身就已经是元组加键值的形式, 所以不需要用 zip 也没关系
然后 key 选取的时候没法直接定位到目标, 所以使用匿名函数筛选
答案
答案一
import random d = {x: random.randint(60, 100) for x in "asdcdfg"} print(d) # {'a': 74, 's': 91, 'd': 90, 'c': 87, 'f': 83, 'g': 81} print(d.keys()) # dict_keys(['a', 's', 'd', 'c', 'f', 'g']) print(d.values()) # dict_values([74, 91, 90, 87, 83, 81]) d = list(zip(d.values(), d.keys())) print(sorted(d)) # [(74, 'a'), (81, 'g'), (83, 'f'), (87, 'c'), (90, 'd'), (91, 's')]
答案二
import random d = {x: random.randint(60, 100) for x in "asdcdfg"}
print(d.items()) # dict_items([('a', 100), ('s', 66), ('d', 92), ('c', 93), ('f', 69), ('g', 74)]) print(sorted(d.items(), key=lambda x: x[1])) # [('s', 66), ('f', 69), ('g', 74), ('d', 92), ('c', 93), ('a', 100)]