Horje
Python Get All Values from Nested Dictionary

In this article, we will learn how we can Get all Values from Nested Dictionary in Python Programming. A nested Dictionary in Python is a dictionary that contains another dictionary as its values. Using this, we can create a nested structure where each of the key-value pairs is in the outer dictionary that points to another dictionary. We will see various methods through which we can get all Values from Nested Dictionary.

Example:

Input: 
{ "website": "/tag",
"founder": {
"name": "Sandeep Jain",
"role": "CEO",
"location": "India"
},
"topics": {
"programming": ["C", "C++", "Java", "Python"],
"web_development": ["HTML", "CSS", "JavaScript", "PHP"],
"data_science": ["Python", "Machine Learning", "Data Analytics"]
}
}
Output:
['/tag', 'Sandeep Jain', 'CEO', 'India', 'C',
'C++', 'Java', 'Python', 'HTML', 'CSS', 'JavaScript', 'PHP', 'Python', 'Machine Learning', 'Data Analytics']

Get All Values from a Nested Dictionary

There are different methods to Get All Values from a Nested Dictionary in Python. Below we are explaining all the possible approaches with practical implementation.

  1. Using Recursion
  2. Using Stack Data Structure
  3. Using itertools.chain
  4. Using json.dumps and json.loads

Get All Values from Nested Dictionary Using Recursion

In this approach, we are using the recursive function apporach1Fn to traverse over the nested input dictionary, we are extracting all values including the nested dictionaries and lists. Then, we store the result in the output object and print it using the print method in Python.

Example: In this example, we are using the Recursive Method to Get All Values from Nested Dictionary.

Python3

# Using recursion to get all values from nested dictionary
def approach1Fn(d):
    val = []
 
    for v in d.values():
        if isinstance(v, dict):
            val.extend(approach1Fn(v))
 
        elif isinstance(v, list):
            for i in v:
                if isinstance(i, dict):
                    val.extend(approach1Fn(i))
                else:
                    val.append(i)
        else:
            val.append(v)
    return val
 
input = {
    "website": "/tag",
    "founder": {
        "name": "Sandeep Jain",
        "role": "CEO",
        "location": "India"
    },
    "topics": {
        "programming": ["C", "C++", "Java", "Python"],
        "web_development": ["HTML", "CSS", "JavaScript", "PHP"],
        "data_science": ["Python", "Machine Learning", "Data Analytics"]
    }
}
 
output = approach1Fn(input)
print(output)

Output:

['/tag', 'Sandeep Jain', 'CEO', 'India', 'C', 'C++', 'Java', 'Python', 'HTML', 'CSS',
'JavaScript', 'PHP', 'Python', 'Machine Learning', 'Data Analytics']

Extract All Values from Nested Dictionary Using Stack Data Structure

In this approach, we are using Stack DSA to iteratively traverse over the input dictionary, push the values on the stack, and pop them to accumulate all the values. This property gets the values from the Nested Dictionary and prints them as the output.

Example: In this example, we are using the Stack Data Structure to Get All Values from Nested Dictionary.

Python3

# Using Stack to get all values from nested dictionary
def apprach2Fn(d):
    stack = [d]
    val = []
 
    while stack:
        curr = stack.pop()
        if isinstance(curr, dict):
            stack.extend(curr.values())
        elif isinstance(curr, list):
            stack.extend(curr[::-1])
        else:
            val.append(curr)
 
    return val
 
input = {
    "website": "/tag",
    "founder": {
        "name": "Sandeep Jain",
        "role": "CEO",
        "location": "India"
    },
    "topics": {
        "programming": ["C", "C++", "Java", "Python"],
        "web_development": ["HTML", "CSS", "JavaScript", "PHP"],
        "data_science": ["Python", "Machine Learning", "Data Analytics"]
    }
}
 
output = apprach2Fn(input)
print(output)

Output:

['Python', 'Machine Learning', 'Data Analytics', 'HTML', 'CSS', 'JavaScript', 'PHP', 'C', 'C++', 'Java',
'Python', 'India', 'CEO', 'Sandeep Jain', '/tag']

Find All Values from Nested Dictionary Using itertools.chain()

In this approach, we use itertools.chain to flatten a nested dictionary by properly handling the string elements extracting all the values from the input ditionary, and printing it using the print method.

Example: In this example, we are using the itertools.chain to Get All Values from Nested Dictionary.

Python3

from itertools import chain
 
def approach3Fn(d):
    return list(chain.from_iterable(
        [approach3Fn(v) if isinstance(v, dict) else [v]
         if isinstance(v, str) else v for v in d.values()]
    ))
 
 
# input
input_data = {
    "website": "/tag",
    "founder": {
        "name": "Sandeep Jain",
        "role": "CEO",
        "location": "India"
    },
    "topics": {
        "programming": ["C", "C++", "Java", "Python"],
        "web_development": ["HTML", "CSS", "JavaScript", "PHP"],
        "data_science": ["Python", "Machine Learning", "Data Analytics"]
    }
}
 
output = approach3Fn(input_data)
print(output)

Output:

['/tag', 'Sandeep Jain', 'CEO', 'India', 'C', 'C++', 'Java', 'Python', 'HTML', 'CSS',
'JavaScript', 'PHP', 'Python', 'Machine Learning', 'Data Analytics']

Get All Values from Dictionary Using json.dumps() and json.loads()

In this approach, we are using json.dumps() and json.loads() methods that convert the nested dictionary into the JSON string and then back into a dictionary. We then extract and return the list of all the values from this dictionary and print them as the output.

Example: In this example, we are using the json.dumps() and json.loads() to get all values from Nested Dictionary in Python.

Python3

import json
 
def approach4Fn(d):
    def valFn(i):
        if isinstance(i, dict):
            return [value for sub_item in i.values() for value in valFn(sub_item)]
        elif isinstance(i, list):
            return [value for sub_item in i for value in valFn(sub_item)]
        else:
            return [i]
    json_str = json.dumps(d)
    json_dict = json.loads(json_str)
    return valFn(json_dict)
 
 
input_data = {
    "website": "/tag",
    "founder": {
        "name": "Sandeep Jain",
        "role": "CEO",
        "location": "India"
    },
    "topics": {
        "programming": ["C", "C++", "Java", "Python"],
        "web_development": ["HTML", "CSS", "JavaScript", "PHP"],
        "data_science": ["Python", "Machine Learning", "Data Analytics"]
    }
}
 
output = approach4Fn(input_data)
print(output)

Output:

['/tag', 'Sandeep Jain', 'CEO', 'India', 'C', 'C++', 'Java', 'Python', 'HTML', 
'CSS', 'JavaScript', 'PHP', 'Python', 'Machine Learning', 'Data Analytics']




Reffered: https://www.geeksforgeeks.org


Geeks Premier League

Related
Adding Items to a Dictionary in a Loop in Python Adding Items to a Dictionary in a Loop in Python
Designing Authentication System | System Design Designing Authentication System | System Design
Python Complex to Int Python Complex to Int
How to make Labels in Google Docs How to make Labels in Google Docs
Mobile Tor Browser - Features and Capabilities Mobile Tor Browser - Features and Capabilities

Type:
Geek
Category:
Coding
Sub Category:
Tutorial
Uploaded by:
Admin
Views:
16