checkio-the flat dictionary

尼古拉喜欢对一切看到的东西进行分类。 有一次,斯蒂芬送了他一个标签机作为他的生日礼物, 机器人把在船上的每个面的标签撕了几个星期。 从那时起,他归类在他的实验室的所有试剂, 图书馆的书和在桌子上笔记。 但后来他得知 python 字典,并分类所有索菲亚的机器人的可能的配置。 现在,这些文件被组织在一个很深的嵌套结构, 但索菲亚并不喜欢这样。让我们帮助索菲亚扁平化这些字典。
Python字典是一种可以用来方便地存储和处理配置的数据类型。它允许你通过键来创建嵌套结构来存储数据。您将得到一个字典,其中的键是字符串,值是字符串或字典。我们的目标是使字典扁平化,但保存的结构中的键。其结果应该是一个字典没有嵌套的字典。键应包含原来的字典中的父键的路径。在路径中的键是由以“/”分开。如果值是一个空的字典,那么它应该由一个空字符串(”“)所取代。让我们来看一个例子:
{
“name”: {
“first”: “One”,
“last”: “Drone”
},
“job”: “scout”,
“recent”: {},
“additional”: {
“place”: {
“zone”: “1”,
“cell”: “2”}
}
}
其结果将是:
{“name/first”: “One”, #one parent
“name/last”: “Drone”,
“job”: “scout”, #root key
“recent”: “”, #empty dict
“additional/place/zone”: “1”, #third level
“additional/place/cell”: “2”}
索菲亚已经写了这个任务的代码,但它有一个漏洞。 你需要找到并修复这个漏洞。
输入: 作为字典的一个原始字典。
输出: 作为字典的一个扁平化字典。
前提:
字典中的Keys是非空的字符串
字典中的Values是字典或者字符串

def flatten(dictionary):
    stack = [((), dictionary)]
    result = {}
    while stack:
        path, current = stack.pop()
        for k, v in current.items():
            if isinstance(v, dict):
                ***if v=={}:
                    v=""
                    result["/".join((path + (k,)))]=v
                else:***
                    stack.append((path + (k,), v))
            else:
                result["/".join((path + (k,)))] = v
    return result

加粗斜体为增加的部分。判定v是不是一个空字典,如果是的话,就不继续迭代了,而是给v赋值为“”,然后输出result。

你可能感兴趣的:(checkio-the flat dictionary)