• 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
  • 相关阅读:
    作为一名出色的软件测试工程师,这些能力不可或缺
    利用云服务器搭配宝塔面板解禁网易云
    【Redis使用】一年多来redis使用笔记md文档,第(2)篇:命令和数据库操作
    【Java技术专题】「Java8技术盲区」函数接口字典-看看还有哪些你所不知道函数接口
    在antd-table新增索引列
    如何理解FFT中的频谱泄露效应?
    go语言基本环境搭建
    多媒体技术论文研读报告
    R语言——taxize(第三部分)
    AI推介-大语言模型LLMs论文速览(arXiv方向):2024.01.01-2024.01.10
  • 原文地址:https://blog.csdn.net/u014259820/article/details/133888379