在“重度嵌套”结构中对Python OrderedDict进行排序

时间:2015-02-16 22:16:48

标签: python sorting nested ordereddictionary

我有以下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": {
    }, 
}

基本上我想通过" sort"对该子字典中的不同appleTypes进行排序。每个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": {
    }, 
}

我一直在玩排序函数,但我无法正确理解,我不确定如何在嵌套结构中实现排序。

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

非常感谢任何帮助!

1 个答案:

答案 0 :(得分: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按照您想要的排序顺序包含苹果类型。如果您愿意,可以将其放回原始字典中。

这会回答你的问题吗?