【问题标题】:Sorting Python OrderedDict in "heavily nested" structure在“重嵌套”结构中对 Python OrderedDict 进行排序
【发布时间】:2015-04-17 13:10:21
【问题描述】:

我有以下 Python 字典,我正在尝试将其排序为 OrderedDict。

fruits = {
    "apple": {
        "details": {
            "color": "green", 
            "dim": 100
        },
        "types": {
            "Akane": {
                "taste": "acceptable",
                "sort": 1
            },
            "McIntosh": {
                "taste": "delicious",
                "sort": 0
            }, 
            "Ambrosia": {
                "taste": "ok",
                "sort": 1
            }
        }
    },         
    "pear": {
    }, 
    "banana": {
    }, 
}

基本上,我想通过每个 appleType 的“排序”值对该子词典中的不同 appleType 进行排序。 最后,理想的有序字典应该是这样的:

fruits_sorted = {
    "apple": {
        "details": {
            "color": "green", 
            "dim": 100
        },
        "types": {
            "Akane": {
                "taste": "acceptable",
                "sort": 1
            },
            "Ambrosia": {
                "taste": "ok",
                "sort": 1
            },
            "McIntosh": {
                "taste": "delicious",
                "sort": 0
            }
        }
    },         
    "pear": {
    }, 
    "banana": {
    }, 
}

我一直在使用 sorted 函数,但我不能完全正确,我不确定如何在嵌套结构中实现排序。

fruits_sorted = OrderedDict(sorted(fruits.items(), key=lambda x: x[1]))

非常感谢任何帮助!

【问题讨论】:

    标签: python sorting nested ordereddictionary


    【解决方案1】:

    您的解决方案非常接近;你需要:

    from collections import OrderedDict
    
    apple_types = fruits['apple']['types']
    types_sorted = OrderedDict(sorted(apple_types.items(), key=lambda x: -x[1]['sort']))
    

    现在,types_sorted 具有您想要的排序顺序的苹果类型。如果你愿意,你可以把它放回原来的字典里。

    这能回答你的问题吗?

    【讨论】:

    • 谢谢!我现在有一个问题。 'sort' 可以是 1 或 0,并且 types 中的每个项目都以任意顺序出现。我也需要在它上面按字母排序,因为我想使用每种类型的键,例如“Akane”(对于 1 和 0,我无法实现“可靠”排序,每次执行我的代码都会有差异)。我知道我可以这样做:types_sorted = OrderedDict(sorted(apple_types.items(), key=lambda x: (x[1], -x[1]['sort']))) 这会导致第二个排序不起作用 - 这是因为它将这两个排序条件包含在一个排序中吗?
    猜你喜欢
    • 2014-05-08
    • 2019-02-24
    • 1970-01-01
    • 1970-01-01
    • 2011-12-23
    • 2021-09-24
    • 2016-10-31
    • 2014-04-09
    • 1970-01-01
    相关资源
    最近更新 更多