Python:How to 将hash的所有hash值递归存储到一个字符串中?

2024-09-30 20:25:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据结构:hash of hash

{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

Tags: of字符串in数据结构forenglishvaluehash
1条回答
网友
1楼 · 发布于 2024-09-30 20:25:20

您可以简单地递归地调用函数来获取所有可能的值并连接这些值,如下所示

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, 37, 123.1231.23, 1023, haro haro, 1002, HongKong, 7, UK

相关问题 更多 >