YusufUMS
YusufUMS

Reputation: 1493

extract specific value from dictionary of list of dictionary

I have dataset like this:

{'project-1': [{'id':'1','name':'john'},{'id':'20','name':'steve'}],
 'project-2': [{'id':'6','name':'jack'},{'id':'42','name':'anna'}]}

what I want to extract is the name of all people:

['john','steve','jack','anna']

How to get these list using python?

Upvotes: 1

Views: 27678

Answers (5)

Aaditya Ura
Aaditya Ura

Reputation: 12689

Many solutions trying same old approach here using two loop:

Here is different approach:

One line solution without any loop:

You can use lambda function with map:

data={'project-1': [{'id':'1','name':'john'},{'id':'20','name':'steve'}],
 'project-2': [{'id':'6','name':'jack'},{'id':'42','name':'anna'}]}



print(list(map(lambda x:list(map(lambda y:y['name'],x)),data.values())))

output:

[['john', 'steve'], ['jack', 'anna']]

Upvotes: 1

PollPenn
PollPenn

Reputation: 733

name_id = {'project-1': [{'id':'1','name':'john'},{'id':'20','name':'steve'}], 'project-2': [{'id':'6','name':'jack'},{'id':'42','name':'anna'}]}

name_id['project-1'][0]['name'] = 'john'
name_id['project-1'][1]['name'] = 'steve'
name_id['project-2'][0]['name'] = 'jack'
name_id['project-2'][1]['name'] = 'anna'

The ['project-1'] gets the value corresponding to the project-1 key in the dictionary name_id. [0] is the list index for the first element in the dictionary value. ['name'] is also a key, but of the dictionary in the first element of the list. It gives you the final value that you want.

Upvotes: 0

Samyak Jain
Samyak Jain

Reputation: 300

This should do it.

d = {'project-1': [{'id':'1','name':'john'},{'id':'20','name':'steve'}],
     'project-2': [{'id':'6','name':'jack'},{'id':'42','name':'anna'}]}
result = list()
for key in d:
    for x in d[key]:
        result.append(x['name'])

Upvotes: 1

Chen A.
Chen A.

Reputation: 11338

Iterate over the dict, then over the values of the current dict:

for d_ in d.values():
    for item in d_:
        print item['name']

Or in comprehension

names = [item['name'] for d_ in d.values() for item in d_]
print names
['john', 'steve', 'jack', 'anna']

Upvotes: 2

Alexander
Alexander

Reputation: 109756

my_dict = {
    'project-1': [{'id':'1','name':'john'},{'id':'20','name':'steve'}],
    'project-2': [{'id':'6','name':'jack'},{'id':'42','name':'anna'}]
}

You can use a list comprehension it get the name field from each dictionary contained within the sublists (i.e. within the values of the original dictionary).

>>> [d.get('name') for sublists in my_dict.values() for d in sublists]
['john', 'steve', 'jack', 'anna']

Upvotes: 2

Related Questions