小编Tom*_*cat的帖子

从python中的缩进文本文件创建树/深层嵌套的dict

基本上,我想迭代一个文件并将每行的内容放入一个深度嵌套的dict中,其结构由每行开头的空白量定义.

基本上我们的目标是采取这样的方式:

a
    b
        c
    d
        e
Run Code Online (Sandbox Code Playgroud)

把它变成这样的东西:

{"a":{"b":"c","d":"e"}}
Run Code Online (Sandbox Code Playgroud)

或这个:

apple
    colours
        red
        yellow
        green
    type
        granny smith
    price
        0.10
Run Code Online (Sandbox Code Playgroud)

进入这个:

{"apple":{"colours":["red","yellow","green"],"type":"granny smith","price":0.10}
Run Code Online (Sandbox Code Playgroud)

这样我就可以将它发送到Python的JSON模块并制作一些JSON.

目前我正试图按照这样的步骤制作一个字典和一个列表:

  1. {"a":""} ["a"]
  2. {"a":"b"} ["a"]
  3. {"a":{"b":"c"}} ["a","b"]
  4. {"a":{"b":{"c":"d"}}}} ["a","b","c"]
  5. {"a":{"b":{"c":"d"},"e":""}} ["a","e"]
  6. {"a":{"b":{"c":"d"},"e":"f"}} ["a","e"]
  7. {"a":{"b":{"c":"d"},"e":{"f":"g"}}} ["a","e","f"]

等等

该列表的行为类似于"breadcrumbs",显示了我最后输入dict的位置.

要做到这一点,我需要一种方法来遍历列表并生成类似于dict["a"]["e"]["f"]获取最后一个字典的内容.我已经看过有人制作的AutoVivification类看起来非常有用但是我真的不确定:

  1. 我是否正在使用正确的数据结构(我打算将其发送到JSON库以创建JSON对象)
  2. 如何在此实例中使用AutoVivification
  3. 是否有更好的方法来解决这个问题.

我提出了以下功能,但它不起作用:

def get_nested(dict,array,i):
if i != None:
    i += 1
    if array[i] in dict:
        return get_nested(dict[array[i]],array)
    else:
        return dict
else:
    i = 0
    return get_nested(dict[array[i]],array)
Run Code Online (Sandbox Code Playgroud)

非常感谢帮助!

(其余的非常不完整的代码在这里:)

#Import relevant libraries
import codecs
import …
Run Code Online (Sandbox Code Playgroud)

python parsing dictionary nested data-structures

10
推荐指数
2
解决办法
1万
查看次数

在递归javascript函数中变量是否未定义?

我有一个简单的脚本,我写的是使用递归方法 - 欧几里德算法找到最大公约数(GCD)和最小公倍数(LCM).

不幸的是,如果需要在多个步骤中执行此操作,则从函数返回的相关变量将变为未定义.我试过在带有断点的调试器中跟踪它,它似乎适当地跟随递归并适当地回到原始函数,但它在函数结束时神秘地消失了,即使它意味着返回?

不知道为什么会发生这种情况或我能做些什么来解决它.我的代码如下:

function GCD(a, b) {
    if (a % b == 0) {
        return b;
    }
    else {
        GCD(b, (a % b));
    }
}

function LCM (a, b) {
    return (a*b)/GCD(a, b);
}

function makeDM (a, b) {
    return (GCD(a, b) + " " + LCM(a, b));
}
Run Code Online (Sandbox Code Playgroud)

因此,如果你使用诸如60,20之类的&b,它将给出20和60的正确答案.但是如果你使用诸如20,60或126,35这样的数字,它就会失败.

javascript recursion function

2
推荐指数
1
解决办法
715
查看次数