Python 嵌套字典中的迭代错误

Python iterating bug inside nest dicts

我尝试为 CHECKIO 编写扁平化代码,但得到了奇怪的结果。 当我尝试将 dict inside dict inside dict 扁平化时。

def flatten(dic, prefix =""):
    results = {}
    for k in dic:
        prefix = prefix+"/"+k if prefix else k
        print(prefix)
        if isinstance(dic[k], dict):
            results = dict(list(results.items()) + list(flatten(dic[k],prefix).items()))
        else:
            results[prefix] = dic[k]
    return results
print(flatten({"name": {
                        "first": "One",
                        "last": "Drone"},
                    "job": "scout",
                    "recent": {},
                    "additional": {
                        "place": {

                            "zone": "1",
                            "cell": "2"}}}))

它似乎是代码在字典中跳转而没有首先迭代字典中的第一项 (name)。 当我尝试在主字典上使用 keys() 时,我得到了内部项目。有人知道为什么吗?据我所知,这不应该发生。

谢谢

当您从 prefix==""

开始时
prefix = prefix+"/"+k if prefix else k

只对第一个键有效。在下一次迭代中,prefix 不再是 "",因此函数开始 "stockpiling" 键一个接一个。

使用另一个变量作为组合前缀,永远不要覆盖参数中的值。

更新:关于结果中条目的顺序。您的示例 dict 基本上如下所示:

{   "name": {
        "first": "One",
        "last": "Drone"},
    "job": "scout",
    "recent": {},
    "additional": {
        "place": {
            "zone": "1",
            "cell": "2"
        }
    }
}

因此最外层的 flatten 调用将遍历顶级键 - namejobrecentadditional - 在一些未定义的订单。