Python: Получение всех строк внутри структуры словаря - PullRequest
0 голосов
/ 14 июля 2020

ВНИМАНИЕ: это все еще 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,[])

... и у него все та же проблема.

1 Ответ

2 голосов
/ 14 июля 2020

Проблема в том, что вы повторно добавляете все содержимое при каждой рекурсии. Для решения вместо этого передайте пустой список каждому вызову 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,[])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...