这是为了铭记如何把代码写的漂亮。敬大神~
我最终想要得到的效果是这样的:‘
水心病 latin_name 糖化病
水心病 latin_name 蜜果病
水心病 symptoms harm plants 果心
水心病 symptoms harm plants 果面
等等
这个的思想利用动态规划来做,我们需要在判断类型的前提下来进行递归,一直找到最终的Value值,然后把当前Value值所在的路径,也就是k值记录下来。这是大神写的python代码,我要多多鞭策自己!!因为要统一编码为unicode在写入的时候.encode('utf-8')转为str写入文档,所有当我们遍历到值的所在节点的时候,实际上就是unicode类型,对其他非unicode类型的value值也统一转换为unicode类型。
def node_to_list(node, hypothesis, prefix=u''):
if isinstance(node, int):
node = unicode(node)
if isinstance(node, unicode):
node = node.replace(u',', u'COMMA')
pstr(print_pattern.format(prefix, node, hypothesis))
return
elif isinstance(node, list):
if len(node) == 0:
return
for item in node:
node_to_list(item, hypothesis, prefix)
elif isinstance(node, dict):
if len(node) == 0:
return
for key in node:
new_prefix = prefix + delimiter + key
node_to_list(node[key], hypothesis, new_prefix)
else:
pstr(u'unexpected type: {}'.format(type(node)))
我觉得之所以能成功的递归,关键在于递归的每一层究竟是什么在变化,这里的node,prefix的参数设置很重要,当出现字典这种情况,改变prefix就能正常的进行递归了,递归的参数设置很重要,很重要,很重要啊