基本上,我想迭代一个文件并将每行的内容放入一个深度嵌套的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.
目前我正试图按照这样的步骤制作一个字典和一个列表:
{"a":""} ["a"]
{"a":"b"} ["a"]
{"a":{"b":"c"}} ["a","b"]
{"a":{"b":{"c":"d"}}}} ["a","b","c"]
{"a":{"b":{"c":"d"},"e":""}} ["a","e"]
{"a":{"b":{"c":"d"},"e":"f"}} ["a","e"]
{"a":{"b":{"c":"d"},"e":{"f":"g"}}} ["a","e","f"]
等等
该列表的行为类似于"breadcrumbs",显示了我最后输入dict的位置.
要做到这一点,我需要一种方法来遍历列表并生成类似于dict["a"]["e"]["f"]
获取最后一个字典的内容.我已经看过有人制作的AutoVivification类看起来非常有用但是我真的不确定:
我提出了以下功能,但它不起作用:
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) 我有一个简单的脚本,我写的是使用递归方法 - 欧几里德算法找到最大公约数(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这样的数字,它就会失败.