算法试题 - 实现对一个字典的值进行排序

题目

实现对一个字典的值进行排序

解析

思路一

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)]

猜你喜欢

转载自www.cnblogs.com/shijieli/p/10864634.html