zoukankan      html  css  js  c++  java
  • 算法试题

    题目

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

    解析

    思路一

    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)]
  • 相关阅读:
    文件操作与函数
    编码格式
    if、while、for快速掌握
    运算符、数据类型、数据结构
    正则表达式
    面向对象--属性
    面向对象--对象的创建
    函数的内置属性
    类型检查
    函数表达式 及 闭包
  • 原文地址:https://www.cnblogs.com/shijieli/p/10864634.html
Copyright © 2011-2022 走看看