Ways to find the depth of a dictionary in Python
In this article, we are going to see the different methods to find the depth of a nested dictionary.
Let’s see how we can do this.
Method 1: Using recursion
In this method, the function dic_depth is called recursively, which returns the maximum depth of the current dictionary which is passed as input to the function.
See the code below
# Solution using recursion def dic_depth(dic, depth = 1): if isinstance(dic, dict) and dic: return 1 + max(dic_depth(dic[key], depth) for key in dic) return 0 if __name__ == "__main__": # Example 1 dic1 = {1:'Python', 2: {3: {4: {5:'C#'},6:'Java'},7:'C++'}} print('Depth of dictionary 1->',dic_depth(dic1)) # Example 2 dic2 = {'fruits':{'peach':1,'mango':2,},'vegetable':{}} print('Depth of dictionary 1->',dic_depth(dic2))
Output:
Depth of dictionary 1-> 4 Depth of dictionary 1-> 2
We can also use the map function to map the items of the current dictionary to the caller function.
See the code below.
# Solution using recursion def dic_depth(dic, depth = 1): if isinstance(dic, dict) and dic: return 1 + max(map(dic_depth,dic.values())) return 0 if __name__ == "__main__": # Example 1 dic1 = {1:'Python', 2: {3: {4: {5:'C#'},6:'Java'},7:'C++'}} print('Depth of dictionary 1->',dic_depth(dic1)) # Example 2 dic2 = {'fruits':{'peach':1,'mango':2,},'vegetable':{}} print('Depth of dictionary 1->',dic_depth(dic2))
Output:
Depth of dictionary 1-> 4 Depth of dictionary 1-> 2
Method 2: Iterative
In iterative solution, we first create a list of the initial dictionary with its initial dept. Now we keep popping the items of the list and update the current max depth. We then insert the items of the current dictionary into the list with increased depth.
See the code below and try to understand it with the comments written in the code.
# Iterative solution def dic_depth(Dict): # initial depth initial_depth = 1 # list containg intial dictionary object # and its initial depth obj_list = [(Dict,initial_depth)] # initialising maximum depth max_depth = 0 # Iterate till the list # becomes empty while(obj_list): # current dictionary object and its depth curr_dic , depth = obj_list.pop() max_depth = max(max_depth, depth) # Inserting the items of the # current dictionary if it is a dictionary instance # and increasing the depth by 1 obj_list = obj_list + [(k, depth + 1) for k in curr_dic.values() if isinstance(k, dict)] return max_depth if __name__ == "__main__": # Example 1 dic1 = {1:'Python', 2: {3: {4: {5:'C#'},6:'Java'},7:'C++'}} print('Depth of dictionary 1->',dic_depth(dic1)) # Example 2 dic2 = {'fruits':{'peach':1,'mango':2,},'vegetable':{}} print('Depth of dictionary 1->',dic_depth(dic2))
Output:
Depth of dictionary 1-> 4 Depth of dictionary 1-> 2
Leave a Reply