Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何递归迭代有序字典?_Python_Python 2.7_Recursion - Fatal编程技术网

Python 如何递归迭代有序字典?

Python 如何递归迭代有序字典?,python,python-2.7,recursion,Python,Python 2.7,Recursion,我有以下XML文件: 甘巴德拉 马修 matthew@standford.org XML开发人员指南 计算机 44.95 2000-10-01 深入了解如何创建应用程序 使用XML。 伽洛斯 迈克 mike@gmail.com VisualStudio7:综合指南 计算机 49.95 2001-04-16 深入探索了Microsoft Visual Studio 7, 看看Visual Basic、Visual C++、C语言和ASP+ 综合开发 环境 我已经使用xmltodict模块将文件

我有以下XML文件:


甘巴德拉
马修
matthew@standford.org
XML开发人员指南
计算机
44.95
2000-10-01
深入了解如何创建应用程序
使用XML。
伽洛斯
迈克
mike@gmail.com
VisualStudio7:综合指南
计算机
49.95
2001-04-16
深入探索了Microsoft Visual Studio 7,
看看Visual Basic、Visual C++、C语言和ASP+
综合开发
环境
我已经使用
xmltodict
模块将文件转换为字典,该模块返回一个有序字典。此词典包含词典中的词典作为值

from xmltodict import parse
data=open(file_name).read().replace('\n', '')
xml_dict = parse(data)
现在,我想以“key::value”格式以递归的方式将
xml\u dict
打印到给定的深度

任何人都可以告诉我如何以递归的方式迭代这个字典

我尝试过以下代码:

def print_dict(_dict):
   for k, v in _dict.items():
    if hasattr(v, 'items'):
           print_dict(v)
    elif isinstance(v, list):
        for i in v:
            print_dict(dict(i))
    else:
            print "(%s::%s)"%(k,v)
但是这个代码本标签不见了


那么,这个问题的解决方案是什么……

我认为问题在于在递归情况下没有使用
k
键值。我不知道您希望输出看起来如何,但我怀疑您可以通过向
if
elif
块添加print语句来实现

下面是一个版本,通过添加可选的“缩进”参数,可以使输出看起来更漂亮:

def print_dict(_dict, indent=""):
    for k, v in _dict.items():
        if hasattr(v, 'items'):
            print "%s(%s::" % (indent, k)
            print_dict(v, indent + "  ")
            print "%s)" % indent
        elif isinstance(v, list):
            print "%s(%s::" % (indent, k)
            for i in v:
                print_dict(dict(i), indent + "  ")
            print "%s)" % indent
        else:
            print "%s(%s::%s)" % (indent, k, v)

elif isinstance(v,list):
然后在下面
打印dict(dict(i))
。这不应该是简单的
printv(i)
?您不能使用xml解析器的任何原因吗?请说明您希望输出是什么样的。