Python 如何递归迭代有序字典?
我有以下XML文件: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模块将文件
甘巴德拉
马修
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解析器的任何原因吗?请说明您希望输出是什么样的。