当前位置:   article > 正文

浅尝ChatGPT使用之Python字典嵌套排序_python对嵌套dict进行排序

python对嵌套dict进行排序

一、背景

所负责的项目从v1.0升级到v2.0之后,发送到kafka的Json数据字段顺序和内容有所改变,
v1.0版本推送数据样例:

{
  "name": "小王子",
  "author": "安托万·德·圣-埃克苏佩里(1900-1944)",
  "platform": "京东",
  "detailinfo": {
    "commodity code": "12157218",
    "published date": "2017-02-01",
    "published house": " 浙江文艺出版社",
    "number of pages": 208
  },
  "content": "遥远星球上的小王子,与美丽而骄傲的玫瑰吵架负气出走,在各星球漫游中,小王子遇到了傲慢的国王,一个任性的酒鬼,一个唯利是图的商人,一个死守教条的地理学家,而后来到地球上,试图找到治愈孤独和痛苦的良方。这时,他遇到一只渴望被驯养的狐狸,于是奇妙而令人惊叹的事情发生了",
  "price": 26.5
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

v2.0版本推送数据样例:

{
  "name": "小王子",
  "author": "安托万·德·圣-埃克苏佩里(1900-1944)",
  "content": "遥远星球上的小王子,与美丽而骄傲的玫瑰吵架负气出走,在各星球漫游中,小王子遇到了傲慢的国王,一个任性的酒鬼,一个唯利是图的商人,一个死守教条的地理学家,而后来到地球上,试图找到治愈孤独和痛苦的良方。这时,他遇到一只渴望被驯养的狐狸,于是奇妙而令人惊叹的事情发生了",
  "detailinfo": {
    "published house": " 浙江文艺出版社",
    "published date": "2017-02-01",
    "commodity code": "12157218",
    "number of pages": 208
  },
  "Price": 26.5,
  "platform": "京东"
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

为了方便diff出两个版本的数据差异,需要先对字典数据进行排序

二、需求

如何用Python3实现一个嵌套字典排序?

三、实现

3.1 实现思路
  1. 自己编程实现:呃呃~,对于一个菜鸟测试人员来说,这不是为难我嘛
  2. 搜索引擎上查查资料: 搜索结果五花八门,看着头大
  3. ChatGPT: 听说ta写代码能力很在行,今天试试看,说干就干
3.2 具体实现

流程图:
在这里插入图片描述

ChatGPT问答结果
在这里插入图片描述

def recursive_dict_sort(dictionary):
    if isinstance(dictionary, dict):
        return {k: recursive_dict_sort(v) for k, v in sorted(dictionary.items())}
    elif isinstance(dictionary, list):
        return [recursive_dict_sort(v) for v in dictionary]
    else:
        return dictionary
        
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

完整程序代码:

import json


def recursive_dict_sort(dictionary):
    if isinstance(dictionary, dict):
        return {k: recursive_dict_sort(v) for k, v in sorted(dictionary.items())}
    elif isinstance(dictionary, list):
        return [recursive_dict_sort(v) for v in dictionary]
    else:
        return dictionary


def read_data():
    with open('data_before_sort.json', 'r') as data_file:
        data = json.load(data_file)
    return data

if __name__ == '__main__':
    kafka_data =  read_data()
    res = recursive_dict_sort(kafka_data)
    res = json.dumps(res,indent=4, ensure_ascii=False)  #格式化json输出

    with open('data_after_sort.json', 'w', encoding='utf-8') as f:
        f.writelines(res)
    print(res)


  • 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

四、效果

排序前diff:
在这里插入图片描述
排序后diff:
在这里插入图片描述
进行diff,惊喜发现,price中的p字母,两个版本大小写不一致,喜提一个bug

五、收益

diff发现两个版本字母大小写不一致问题

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/722807
推荐阅读
相关标签
  

闽ICP备14008679号