【问题标题】:Python: Getting all strings inside dictionary structurePython:获取字典结构中的所有字符串
【发布时间】:2020-11-03 13:34:26
【问题描述】:

警告:这仍然是 Python 2.7!

由于某种原因,以下函数的运行时间非常慢:

def get_content(d,content):
    if isinstance(d,unicode):
        content += d
        content += u'\n'
    elif isinstance(d,dict):
        for key in d:
            content += get_content(d[key],content)
    elif isinstance(d,list):
        for el in d:
            content += get_content(el,content)
    return content

content = get_content(D,u'')

虽然D 很小。在尺寸方面没有什么疯狂的事情发生。

您是否了解问题所在或解决任务的更好方法?

编辑:我将代码更改为 ...

def get_content(d,content):
    if isinstance(d,unicode):
        content += [d]
    elif isinstance(d,dict):
        for key in d:
            content += get_content(d[key],content)
    elif isinstance(d,list):
        for el in d:
            content += get_content(el,content)
    return content

content = get_content(D,[])

...它仍然有同样的问题。

【问题讨论】:

  • 它在你的机器上运行了多少小时?
  • 递归中没有基本情况
  • 不推荐重复的字符串连接。尝试将您的数据附加到列表并在最后使用'\n'.join(your_list)。每次连接字符串时,都必须在内存中重新创建整个字符串。见stackoverflow.com/questions/3055477/…
  • @RadioControlled:递归结束的情况,即get_content()不再被调用。
  • 您不应该为所有get_content 调用传递一个空列表吗?例如只附加“新”的东西

标签: python string dictionary unicode key-value-store


【解决方案1】:

问题是您在每次递归时重新附加整个内容。要解决将空列表传递给每个 get_content 调用的问题。

def get_content(d,content):
    if isinstance(d,unicode):
        content += [d]
    elif isinstance(d,dict):
        for key in d:
            content += get_content(d[key],[])
    elif isinstance(d,list):
        for el in d:
            content += get_content(el,[])
    return content

content = get_content(D,[])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-02
    • 2016-05-27
    • 2020-02-06
    • 2019-04-22
    • 2020-07-07
    • 2015-04-22
    • 2015-06-01
    • 2014-04-23
    相关资源
    最近更新 更多