Python: Getting all strings inside dictionary structure

WARNING: This is still Python 2.7!

For some reason the following function has extremely slow runtime:

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'') 

That is although D is quite small. Nothing crazy going on there size-wise.

Do you see what the problem is or what would be a better way to solve the task?

EDIT: I changed the code to …

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,[]) 

… and it still has the same problem.

Add Comment
1 Answer(s)

The problem is that you are reappending the whole content at each recursion. To solve pass an empty list to each get_content call instead.

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,[]) 
Answered on July 16, 2020.
Add Comment

Your Answer

By posting your answer, you agree to the privacy policy and terms of service.