嵌套dict中的Python迭代错误

2024-10-03 11:18:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试为CHECKIO编写扁平化代码,结果很奇怪。 当我试着把dict里面的dict弄平dict里面的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"}}}))

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

谢谢


Tags: 代码nameprefixifdefitemselseresults
1条回答
网友
1楼 · 发布于 2024-10-03 11:18:16

当你从prefix==""开始

prefix = prefix+"/"+k if prefix else k

仅适用于第一个键。在下一次迭代中,prefix不再是"",因此函数开始将键“堆积”在另一个键上。你知道吗

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

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

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

因此,最外层的flatten调用将以某种未定义的顺序迭代顶级键namejobrecentadditional。你知道吗

相关问题 更多 >