Search code examples
pythondictionarydefaultdict

Creating a nested dictionary from a list of tuples


I have a list of tuples as shown below. I want to create a nested dictionary where the first element in the tuple is key and the values with the same keys should be grouped into the same key as a dictionary.

This is what I tried but it doesn't give me the nested dictionary I wanted.

data = [(37043, 2862826), (37043,2850223), (37107,2847978), (37107,2848001), (37107,2844725)]

data_dict = defaultdict(list)
for key, value in data:
    value = {value:1}
    data_dict[key].append(value)

print (data_dict)
>>> defaultdict(<class 'list'>, {37043: [{2862826: 1}, {2850223: 1}], 37107: [{2847978: 1}, {2848001: 1}, {2844725: 1}]})

data_dict = defaultdict(dict)    
for key, value in data:
    value = {value:1}
    data_dict[key] = value

print (data_dict)
>>> defaultdict(<class 'dict'>, {37043: {2850223: 1}, 37107: {2844725: 1}})

Desired result:

 {37043: {2862826: 1, 2850223: 1}, 37107: {2847978:1, 2848001: 1, 2844725: 1}}

Solution

  • How about using defaultdict(dict):

    >>> data_dict = defaultdict(dict)
    >>> for key, value in data:
    ...     data_dict[key][value] = 1
    ... 
    >>> data_dict
    defaultdict(<type 'dict'>, {37043: {2862826: 1, 2850223: 1}, 37107: {2848001: 1, 2847978: 1, 2844725: 1}})