【发布时间】:2013-03-04 09:33:50
【问题描述】:
我需要递归遍历字典并记住之前的键。
让我解释一下:
dic = {u'resources': {u'info': {u'load': (u'37', u'17')}}, u'peak': {u'load': (u'0', u'1')}}
元素始终是一个值或字典,直到它达到一个值。
我想像这样打印上面的dic:(省略下面的xxx,它最终应该是两个值的差异)
resources info load 37 17 xxx
resources peak load 0 1 xxx
这是我目前的代码:
def convertToTable(var):
if isinstance(var, tuple):
if len(var) != 2:
return str(var)
v1, v2 = var
try:
v1 = float(v1)
v2 = float(v2)
except ValueError:
pass
if type(v1) != type(v2):
return '\t%s\t%s\n' % (v1, v2)
elif isinstance(v1, int) or isinstance(v1, float):
sign = '+' if v2 - v1 > 0 else ''
return '\t%s\t%s\t%s%s\n' % (v1, v2, sign, v2 - v1)
elif isinstance(v1, list):
ret = ''
for i in range(max(len(v1), len(v2))):
v1v = v1[i] if i < len(v1) else ''
v2v = v2[i] if i < len(v2) else ''
ret += '\t%s, %s\n' % (v1v, v2v)
return ret
else:
return '\t%s\t%s\n' % (v1, v2)
elif isinstance(var, dict):
ret = ''
for key, value in var.iteritems():
# fix this crap, it's not printing all recursive levels of keys!
ret += '%s %s' % (key, convertToTable(value))
return ret
else:
return '%s\n' % (var)
我不知道如何再次将以前的键递归地传递给函数!要么我得到额外的钥匙打印,要么什么都没有! (请不要建议我应该使用json.dumps,因为它并不能真正满足我的需要!)
我希望有人可以检查我的解决方案并指出其中的缺陷!
【问题讨论】:
-
子元素可以是类型列表还是字典?
-
key
level1的值是 dict 类型,但level2B和level3B的值是 dicts 列表。level1可以/应该是一个包含单个字典的列表吗? -
@fabian,对不起,我搞砸了这个例子。孩子总是一个元素或元组
-
@theAlse 什么是元素?你能更新你的帖子吗?
-
对不起,我搞砸了这个例子。请看更新的!
标签: python recursion dictionary python-2.7