How to convert a nested OrderedDict to Dict in Python?

Python's OrderedDict is a dictionary subclass that remembers insertion order. When working with nested data structures, you may need to convert a nested OrderedDict to a regular dict for easier processing or compatibility with other functions.

What is an OrderedDict?

An OrderedDict is a subclass of a regular dictionary that maintains the order of items as they were inserted. A nested OrderedDict contains other OrderedDict objects as values, creating hierarchical data structures.

Here's an example of a nested OrderedDict ?

from collections import OrderedDict

nested_odict = OrderedDict({
    'Name': 'John Doe',
    'Age': 25,
    'Contact': OrderedDict({
        'Email': 'johndoe@example.com',
        'Phone': '123-456-7890'
    }),
    'Address': OrderedDict({
        'Street': '123 Main St',
        'City': 'Anytown',
        'State': 'CA',
        'Zip': '12345'
    })
})

print(type(nested_odict))
print(type(nested_odict['Contact']))
<class 'collections.OrderedDict'>
<class 'collections.OrderedDict'>

Converting Using Recursion

The most effective approach uses recursion to traverse all nested levels and convert each OrderedDict to a regular dict ?

from collections import OrderedDict

def nested_odict_to_dict(nested_odict):
    # Convert the outer OrderedDict to a regular dict
    result = dict(nested_odict)
    
    # Iterate through each key-value pair
    for key, value in result.items():
        # Check if the value is an OrderedDict
        if isinstance(value, OrderedDict):
            # Recursively convert nested OrderedDict
            result[key] = nested_odict_to_dict(value)
    
    return result

# Test the function
nested_odict = OrderedDict({
    'Name': 'John Doe',
    'Age': 25,
    'Contact': OrderedDict({
        'Email': 'johndoe@example.com',
        'Phone': '123-456-7890'
    }),
    'Address': OrderedDict({
        'Street': '123 Main St',
        'City': 'Anytown',
        'State': 'CA',
        'Zip': '12345'
    })
})

regular_dict = nested_odict_to_dict(nested_odict)
print(type(regular_dict))
print(type(regular_dict['Contact']))
print(regular_dict)
<class 'dict'>
<class 'dict'>
{'Name': 'John Doe', 'Age': 25, 'Contact': {'Email': 'johndoe@example.com', 'Phone': '123-456-7890'}, 'Address': {'Street': '123 Main St', 'City': 'Anytown', 'State': 'CA', 'Zip': '12345'}}

How It Works

The recursive function works in three steps:

1. Convert outer structure: dict(nested_odict) converts the outer OrderedDict to a regular dict

2. Check each value: isinstance(value, OrderedDict) identifies nested OrderedDict objects

3. Recursive conversion: The function calls itself on nested OrderedDict values

Alternative Using JSON

You can also use JSON serialization for conversion ?

from collections import OrderedDict
import json

nested_odict = OrderedDict({
    'Name': 'John Doe',
    'Contact': OrderedDict({
        'Email': 'johndoe@example.com',
        'Phone': '123-456-7890'
    })
})

# Convert using JSON
regular_dict = json.loads(json.dumps(nested_odict))
print(type(regular_dict))
print(regular_dict)
<class 'dict'>
{'Name': 'John Doe', 'Contact': {'Email': 'johndoe@example.com', 'Phone': '123-456-7890'}}

Comparison

Method Advantages Disadvantages
Recursive Function Handles complex objects, preserves data types More code required
JSON Method Simple one-liner Only works with JSON-serializable data

Conclusion

Use the recursive approach for robust conversion of nested OrderedDict to dict. The JSON method works well for simple data structures containing only basic Python types.

Updated on: 2026-03-27T09:15:37+05:30

1K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements