首页 > 解决方案 > 按值对具有 3 个嵌套字典的列表进行排序

问题描述

按值排序嵌套字典列表的答案 不适用于更多嵌套数据,例如

[
    {
        "primary_key": 228282,
        "success": "YES",
        "date": "2020-10-09T10:10:33.123456",
        "spec": "text text text",
        "details": {
                    "quality": "228.33",
                    "measure": {
                        "title": "kilo",
                        "sign": "kg"
                }
            },
        "address_from": "NY",
        "address_to": "CA",
    },
    
    ...
    
]

如果我想按“日期”排序,则会出现错误:

    [item for item in lis if isinstance(item['date'], str)],
KeyError: 'date'

在这种情况下如何按日期排序?

https://www.dropbox.com/s/2wc44gv9puwjd8t/228.json?dl=0我有 .json 文件。我的尝试:

import json

with open("operations.json", "r", encoding='utf-8') as read_file:
    lis = json.load(read_file)
    print(lis)

print(
    sorted(
        [item for item in lis if isinstance(item['date'], str)],
        key=lambda i: i['date']
    )
)

标签: pythonjsondictionarynested

解决方案


如果其中items没有operations.json日期键,您可以定义一个默认值(None例如):

import json

with open("operations.json", "r", encoding='utf-8') as read_file:
    lis = json.load(read_file)

print(
    sorted(
        [item for item in lis if isinstance(item.get('date', None), str)],
        key=lambda i: i['date']
    )
)

出去:

[{'primary_key': 228282, 'success': 'YES', 'date': '2020-10-09T10:10:33.123456', 'spec': 'text text text', 'details': {'quality': '228.33', 'measure': {'title': 'kilo', 'sign': 'kg'}}, 'address_from': 'NY', 'address_to': 'CA'}]

解释: item.get('date', None),尝试访问date,如果不可用,请使用None


推荐阅读