• Python 字典排序


    一、字典按key值排序

    1.实现代码:
    d = {"a": 1, "c": 3, "b": 4, "d": 2}
    
    # 基于key进行排序
    def sort_dict_data(dict_data, reverse=False):
        sorted_key = sorted(dict_data.keys(), reverse=reverse)
        sorted_dict = {}
        for key in sorted_key:
            sorted_dict[key] = dict_data[key]
        return sorted_dict
    
    result = sort_dict_data(d)
    print(result)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    2.输出结果:
    {'a': 1, 'b': 4, 'c': 3, 'd': 2}
    
    • 1

    二、字典按value值排序

    按上例,如果要按照"events"的数量进行排序,那么我们要怎么样处理呢?

    1.实现代码
    d = {"a": 1, "c": 3, "b": 4, "d": 2}
    
    # 基于value进行排序
    def sort_dict_by_value(dict_data, reverse=False):
        sorted_items = sorted(dict_data.items(), key=lambda x: x[1], reverse=reverse)
        sorted_dict = {}
        for item in sorted_items:
            sorted_dict[item[0]] = item[1]
        return sorted_dict
    
    result = sort_dict_by_value(d)
    print(result)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    2.测试结果
    {'a': 1, 'd': 2, 'c': 3, 'b': 4}
    
    • 1

    三、字段按多个value值进行排序

    d = {
        "user3": {
            "name": "Tom",
            "score": 89
        },
        "user2": {
            "name": "John",
            "score": 95
        },
        "user4": {
            "name": "Adam",
            "score": 89
        },
        "user1": {
            "name": "Mary",
            "score": 90
        }
    }
    
    # 基于多个value进行排序
    def sort_dict_by_multiple_value(dict_data, reverse=False):
        sorted_items = sorted(dict_data.items(), key=lambda x: (x[1]["score"], x[1]["name"]), reverse=reverse)
        sorted_dict = {}
        for item in sorted_items:
            sorted_dict[item[0]] = item[1]
        return sorted_dict
    
    result = sort_dict_by_multiple_value(d, reverse=True)
    print(result)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    2. 测试结果
    {'user2': {'name': 'John', 'score': 95}, 'user1': {'name': 'Mary', 'score': 90}, 'user3': {'name': 'Tom', 'score': 89}, 'user4': {'name': 'Adam', 'score': 89}}
    
    • 1

    如上,我们先按照score从高到低排序,再按照name从大到小排序
    那么问题来了,如果我们需要将name改成按从小到大排序要怎么办呢?

    d = {
        "user3": {
            "name": "Tom",
            "score": 89
        },
        "user2": {
            "name": "John",
            "score": 95
        },
        "user4": {
            "name": "Adam",
            "score": 89
        },
        "user1": {
            "name": "Mary",
            "score": 90
        }
    }
    
    # 基于多个value进行排序
    def sort_dict_by_multiple_value(dict_data, reverse=False):
        # if reverse:
        #     reverse = False
        # else:
        #     reverse = True
        sorted_items = sorted(dict_data.items(), key=lambda x: (-x[1]["score"], x[1]["name"].encode()), reverse=reverse)
        sorted_dict = {}
        for item in sorted_items:
            sorted_dict[item[0]] = item[1]
        return sorted_dict
    
    result = sort_dict_by_multiple_value(d, reverse=False)
    print(result)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    测试结果:

    {'user2': {'name': 'John', 'score': 95}, 'user1': {'name': 'Mary', 'score': 90}, 'user4': {'name': 'Adam', 'score': 89}, 'user3': {'name': 'Tom', 'score': 89}}
    
    • 1
  • 相关阅读:
    如何运行github上的项目
    现代 Android 开发的第一步Kotlin
    2309xmake快速编译cpr
    Markdown使用方法
    银行卡四要素API接口的验证流程
    kafka命令行操作
    ASP.net数据从Controller传递到视图
    【计算机网络】【《计算机网络·自顶向下方法(原书第7版)》笔记】第三章:运输层
    ZGC关键技术分析
    基于OpenGL和GLSL实现一个三维图形绘制交互程序,能够读入三维obj文件、绘制并打上光照(同时实现线框图和实体图绘制),并且实现基本的三维交互—包含平移、旋转和缩放。
  • 原文地址:https://blog.csdn.net/u014259820/article/details/133888379