Harshil Parikh
Harshil Parikh

Reputation: 291

Updating a list of python dictionaries with a key, value pair from another list

Let's say I have the following list of python dictionary:

dict1 = [{'domain':'Ratios'},{'domain':'Geometry'}]

and a list like:

list1 = [3, 6]

I'd like to update dict1 or create another list as follows:

dict1 = [{'domain':'Ratios', 'count':3}, {'domain':'Geometry', 'count':6}]

How would I do this?

Upvotes: 12

Views: 20384

Answers (4)

jamylak
jamylak

Reputation: 133514

>>> l1 = [{'domain':'Ratios'},{'domain':'Geometry'}]
>>> l2 = [3, 6]
>>> for d,num in zip(l1,l2):
        d['count'] = num


>>> l1
[{'count': 3, 'domain': 'Ratios'}, {'count': 6, 'domain': 'Geometry'}]

Another way of doing it, this time with a list comprehension which does not mutate the original:

>>> [dict(d, count=n) for d, n in zip(l1, l2)]
[{'count': 3, 'domain': 'Ratios'}, {'count': 6, 'domain': 'Geometry'}]

Upvotes: 23

dan-boa
dan-boa

Reputation: 610

Using list comprehension will be the pythonic way to do it.

[data.update({'count': list1[index]}) for index, data in enumerate(dict1)]

The dict1 will be updated with the corresponding value from list1.

Upvotes: 0

Thanasis Petsas
Thanasis Petsas

Reputation: 4448

You can do this:

# list index
l_index=0

# iterate over all dictionary objects in dict1 list
for d in dict1:

    # add a field "count" to each dictionary object with
    # the appropriate value from the list
    d["count"]=list1[l_index]

    # increase list index by one
    l_index+=1

This solution doesn't create a new list. Instead, it updates the existing dict1 list.

Upvotes: 3

larsks
larsks

Reputation: 311387

You could do this:

for i, d in enumerate(dict1):
    d['count'] = list1[i]

Upvotes: 6

Related Questions