zoukankan      html  css  js  c++  java
  • 使用sorted函数对字典元素排序


    前言

    几天前,你要是让我对字典的元素进行排序,我会告诉你,先用一个列表存储要排序的元素,然后使用sort()对列表元素进行排序,之后就能根据键-值对应情况判断字典元素的顺序。

    • 比如:
      用字典存储学号和成绩,输出前三名的学号和成绩。
    stu = {1002: 78, 1003: 89,
           1001: 77, 1006: 98,
           1005: 92, 1004: 100}
    
    score = list(stu.values())
    score.sort()
    for key, val in enumerate(score[::-1]):
        if key < 3:
            for i in stu.keys():
                if stu[i] == val:
                    print(i, val)
    
    • 输出结果

    1004 100
    1006 98
    1005 92

    这是个蠢方法,费时又费力。好在我现在知道了sorted()函数,可以很方便地对字典进行排序。


    sorted()函数

    sorted可对所有可迭代对象进行排序操作。

    sorted语法

    sorted(iterable, cmp=None, key=None, reverse=False)
    
    • iterable 可迭代对象
    • cmp 比较的函数。这个具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回1,小于则返回-1,等于则返回0。
      • 个人觉得cmp不如key好用。
    • key 主要是用来进行比较的函数。只有一个参数,具体的函数的参数就是取自可迭代对象中,指定可迭代对象中的一个元素进行排序。
    • reverse 排序规则。reverse=True 降序, reverse=False 升序(默认)

    返回值

    返回重新排序的列表


    sorted()给字典排序

    按value值对字典排序

    需要用到key参数

    • 对成绩进行降序排序
    stu = {1002: 78, 1003: 89,
           1001: 77, 1006: 98,
           1005: 92, 1004: 100}
    
    score = sorted(stu.items(), key=lambda item:item[1], reverse=True)
    # 查看score
    print(score)
    # 取前三名
    for index, val in enumerate(score):
        if index < 3:
            print(val[0], val[1], sep=" ")
    
    • stu.items():将stu的键值对转换为元组
      dict_items([(1002, 78), (1003, 89), (1001, 77), (1006, 98), (1005, 92), (1004, 100)])
    • stu.items()的每一个元素作为匿名函数的参数,返回第二个元素,也就是成绩,作为key参数的比较对象。
    • reverse=True:降序排序
    • 输出结果

    [(1004, 100), (1006, 98), (1005, 92), (1003, 89), (1002, 78), (1001, 77)]
    1004 100
    1006 98
    1005 92

    按key值对字典排序

    • 按学号进行排序
    stu = {1002: 78, 1003: 89,
           1001: 77, 1006: 98,
           1005: 92, 1004: 100}
    
    score = sorted(stu.items(), key=lambda item:item[0])
    for index, val in enumerate(score):
        print(val[0], val[1], sep=" ")
    
    • 输出结果

    1001 77
    1002 78
    1003 89
    1004 100
    1005 92
    1006 98

    只对键或值排序

    如果只想输出键的排序结果或者值的排序结果。很简单,使用dict.keys()和dict.values()作为sorted的参数就行了。

    stu = {1002: 78, 1003: 89,
           1001: 77, 1006: 98,
           1005: 92, 1004: 100}
    
    print(sorted(stu.keys()))
    print(sorted(stu.values()))
    
    • 输出结果

    [1001, 1002, 1003, 1004, 1005, 1006]
    [77, 78, 89, 92, 98, 100]

    注意:sorted()并不会影响原字典。

  • 相关阅读:
    【转】 Linux Core Dump 介绍
    【转】 设定linux 系统可用资源
    Python for 循环 失效
    transition 平移属性实现 横向整屏 滚动
    vue 插槽的使用
    vue pc商城仿网易严选商品的分类效果
    干货-vue 中使用 rxjs 进行非父子组件中传值
    vue 2.0 脚手架项目中使用 cross-env 分环境打包
    什么是闭包,有哪些优缺点呢?
    滚动视差
  • 原文地址:https://www.cnblogs.com/CharrammaBlog/p/12591378.html
Copyright © 2011-2022 走看看