Open In App

Convert List of Named Tuples to Dictionary - Python

Last Updated : 23 Jan, 2025
Summarize
Comments
Improve
Suggest changes
Share
Like Article
Like
Report

We are given a list of named tuples we need to convert it into dictionary. For example, given a list li = [d("ojaswi"), d("priyank"), d("sireesha")], the goal is to convert it into a dictionary where each unique key maps to a list of its corresponding values, like {'Name': 'ojaswi'},{'Name': 'priyank'},{'Name': 'sireesha'}.

Using groupby()

We can use groupby() to convert a list of named tuples into a dictionary, where a specific field becomes the key and the corresponding values are grouped together. However, the list must be sorted by the key before using groupby(), as it only groups consecutive elements with the same key.

Python
from collections import namedtuple
from itertools import groupby

# Create a named tuple named DETAILS with one column
d = namedtuple("d", "Name")


li = [d("sireesha"), d("priyank"), d("ojaswi")]

# Sort `li` by the 'Name' field
li.sort(key=lambda x: x.Name)
grouped = groupby(li, key=lambda x: x.Name)
for key, group in grouped:
    for item in group:
        print({'Name': item.Name})

Output
{'Name': 'ojaswi'}
{'Name': 'priyank'}
{'Name': 'sireesha'}

Explanation:

  • Groupby(a, key=lambda x: x.Name):This groups the sorted list li by the Name field.
  • for item in group: This prints each grouped item as a dictionary with the key 'Name' and its corresponding value.

Using defaultdict()

We can use defaultdict() from the collections module to efficiently convert a list of named tuples into a dictionary. Unlike the regular dict, defaultdict() automatically initializes default values for missing keys, avoiding explicit checks for key existence.

Python
from collections import namedtuple, defaultdict

# Create a named tuple named `d`
d = namedtuple("d", "Name")

# Create 4 students
li = [d("ojaswi"), d("sireesha"), d("gnanesh"), d("priyank")]

# Creates a defaultdict
a = defaultdict(list)

for i in li:
    a[i.Name].append(i.Name)
    
for name in a:
    print({'Name': name})

Output
{'Name': 'ojaswi'}
{'Name': 'sireesha'}
{'Name': 'gnanesh'}
{'Name': 'priyank'}

Explanation:

  • for i in li Loops through each i in the list li.
  • a[i.Name].append(i.Name) adds the name to the list corresponding to that name in the dictionary a.
  • for name in a loop iterates over the keys of a and prints each Name as dictionary in the format {'Name': value}.

Using list comprehension

list comprehension efficiently convert a list of named tuples into dictionary.

Python
from collections import namedtuple

# Create a named tuple named `d`
d = namedtuple("d", "Name")

li = [d("ojaswi"), d("sireesha"), d("gnanesh"), d("priyank")]

res = [{'Name': student.Name} for student in li]

for item in res:
    print(item)

Output
{'Name': 'ojaswi'}
{'Name': 'sireesha'}
{'Name': 'gnanesh'}
{'Name': 'priyank'}

Explanation:

  • This transforms each named tuple into a dictionary with "Name" as the key.
  • This loops through res and prints each dictionary.

Next Article

Similar Reads