您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

按特定值对python中的JSON进行排序

5b51 2022/1/14 8:22:06 python 字数 4149 阅读 523 来源 www.jb51.cc/python

您好我试图通过python中的“data_two”字段对以下JSON进行排序:{ '1.2.3.4': { 'data_one': 1, 'data_two': 8, 'list_one': [], 'list_two': [ 'item_one' ], 'data_three': 'strin

概述

您好我试图通过python中的“data_two”字段对以下JSON进行排序:

{
"1.2.3.4": {
    "data_one": 1,"data_two": 8,"list_one": [],"list_two": [
        "item_one"
    ],"data_three": "string1"
},"5.6.7.8": {
    "data_one": 1,"data_two": 9,"data_three": "string1","data_four": "string2","data_five": "string3"
}
}

我尝试过使用类似的东西

entries = sorted(json_data['1.2.3.4'],key=lambda k: k['data_two'])

然而,我没有太多运气/不断混淆.我的最终目标是通过“data_two”值对所有json条目进行排序,其中JSON中每个条目的键是一个随机的IP字符串.我是JSON世界的新手,请原谅我,如果这是一个简单的问题,任何帮助将不胜感激.

谢谢

转换为保留元素顺序的容器

您只能对维护元素顺序的结构进行排序,例如列表,例如有dict实现维护OrderedDict之类的顺序,例如

您可以随时转换为那些(如果慢/大数据可能不是您的首选)

转换为列表[(键,值),…]或列表[value,…]

一种可能的方法是检索dict中的所有值,然后返回这些值的列表,按您选择的字段排序

您还可以对ips_data.items()返回的(键,值)进行排序,但这将创建一个新列表.关键是IP,价值是IP数据

sorted_list_of_keyvalues = sorted(ips_data.items(),key=item[1]['data_two'])

上面的列表以[(key1,value1),(key2,value2),…]的形式出现

您还可以获取值并删除

sorted_list_of_values = [item[1] for item in sorted_list_of_keyvalues]

此列表的形式为[value1,value2,…]

请注意,您可能认为您只能按值而不是(键.值)进行排序,但您的数据中包含IP密钥,您可能希望保留该值.

转换为OrderedDict

如果您绝对希望将结构保留为dict,则可以使用OrderedDict

from collections import OrderedDict
ordered_items = sorted(ips_data.items(),key=lambda item: item[1]['data_two'])
ordered_ips_data_dict = OrderedDict(ordered_items)

有序的dict行为就像一个dict,但是key和items迭代将保持元素的顺序.

或者,保留已排序的键列表,并按此顺序处理

或者,您可以将该字典的键排序到列表中,然后您可以按顺序处理该字典.优点是您不必复制/转换数据

>>> ips_data = {
... "1.2.3.4": {
...     "data_one": 1,...     "data_two": 8,...     "list_one": [],...     "list_two": [
...         "item_one"
...     ],...     "data_three": "string1"
... },... "5.6.7.8": {
...     "data_one": 1,...     "data_two": 9,...     "data_three": "string1",...     "data_four": "string2",...     "data_five": "string3"
... }
... }
>>> ips_data.keys()
['1.2.3.4','5.6.7.8']
>>> ips = ips_data.keys()

现在,您可以按字段data_two对键进行排序

>>> sorted_ips = sorted(ips,key=lambda ip: ips_data[ip]['data_two'],reverse=True)
>>> sorted_ips
['5.6.7.8','1.2.3.4']

排序后的密钥,您可以按照排序的密钥顺序执行您想要的dict,例如,按此顺序处理它可能比将dict复制到像列表这样的新结构更有效

# Trivial example of processing that just puts the values into a list   
>>> [ips_data[ip] for ip in sorted_ips]
[{'data_three': 'string1','data_two': 9,'data_five': 'string3','data_four': 'string2','list_two': ['item_one'],'data_one': 1},{'list_two': ['item_one'],'data_two': 8,'data_one': 1,'data_three': 'string1','list_one': []}]
>>> 

总结

以上是编程之家为你收集整理的按特定值对python中的JSON进行排序全部内容,希望文章能够帮你解决按特定值对python中的JSON进行排序所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶