Python:如何递归地将哈希的所有值存储到字符串中?
我有一个数据结构:散列的散列Python:如何递归地将哈希的所有值存储到字符串中?,python,string,dictionary,Python,String,Dictionary,我有一个数据结构:散列的散列 {u'english':{u'fluent':u'7',u'good':u'UK'},u'id':u'1002',u'zone':u'HongKong',u'latin':{u'verbose':u'1023',u'name':u'haro haro'},u'humble':{u'minor':u'37',u'social':u'123.1231.23',u'milk':u'dailo'} 如何将此数据结构的所有值递归存储到单个字符串中? 我尝试了下面的方法,但失败
{u'english':{u'fluent':u'7',u'good':u'UK'},u'id':u'1002',u'zone':u'HongKong',u'latin':{u'verbose':u'1023',u'name':u'haro haro'},u'humble':{u'minor':u'37',u'social':u'123.1231.23',u'milk':u'dailo'}
如何将此数据结构的所有值递归存储到单个字符串中?
我尝试了下面的方法,但失败得很惨,字符串的结尾没有任何内容
stringofvalues = ''
def printdict(dd,stringofvalues):
if isinstance(dd, list):
for i in np.arange(len(dd)):
printdict(dd[i],stringofvalues)
elif isinstance(dd, dict):
for key, value in dd.items():
printdict(value,stringofvalues)
else:
stringofvalues = dd + str(stringofvalues)
return stringofvalues
您可以简单地递归地调用函数来获取所有可能的值并连接这些值,如下所示
def rec(currentObject):
if isinstance(currentObject, list):
return "".join([rec(item) for item in currentObject])
elif isinstance(currentObject, dict):
return "".join([rec(item) for item in currentObject.values()])
elif isinstance(currentObject, str) or isinstance(currentObject, unicode):
return currentObject
else:
raise TypeError("Unexpected type : {}".format(type(currentObject)))
输入的输出是
dailo37123.1231.231023haro haro1002HongKong7UK
您可以使用默认函数参数并使用分隔符对其进行一点优化
def rec(currentObject, joiner=", ".join):
if isinstance(currentObject, list):
return joiner([rec(item) for item in currentObject])
elif isinstance(currentObject, dict):
return joiner([rec(item) for item in currentObject.values()])
elif isinstance(currentObject, str) or isinstance(currentObject, unicode):
return currentObject
else:
raise TypeError("Unexpected type : {}".format(type(currentObject)))
输出变成
dailo,37123.1231.231023,haro-haro,1002,香港,7,英国
您没有处理来自printdict
的递归返回。我知道我做错了什么。这就是我来这里的原因是的,我已经告诉你了。这不是很好吗?下面你有一个很好的答案。但是要知道,您需要执行的最小操作是在对printdict
的两个内部调用之前添加return
,我在对printdict
的两个内部调用之前添加了return
。但它仍然不起作用。我很想知道您需要对我的代码进行哪些最小的更改才能使其正常工作。谢谢