Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Check if items in a list exist in dictionary

My question might be a little complicated to understand but here's actually the thing. I have a nested dictionary that looks like this:

dict_a = {'one': {'bird':2, 'tree':6, 'sky':1, 'TOTAL':9},
          'two': {'apple':3, 'sky':1, 'TOTAL':4},
          'three': {'tree':6, 'TOTAL':6},
          'four': {'nada':1, 'TOTAL':1},
          'five': {'orange':2, 'bird':3, 'TOTAL':5}
          }

and a list:

list1 = ['bird','tree']
newlist = []

how can I check the items in list1 whether it is in the nested dictionary of dict_a and append it to the newlist? The output should look like this:

newlist = ['one','three','five']

since bird and tree happened to be in the nested dictionary of one, three and five.

What I can think of is:

for s,v in dict_a.items():
    for s1,v1 in v.items():
        for item in list1:
            if item == s1:
               newlist.append(s)
like image 281
Fynn Mahoney Avatar asked May 13 '13 08:05

Fynn Mahoney


People also ask

How do you check if a list item is in a dictionary Python?

Check If Key Exists using get() Using the Inbuilt method get() method returns a list of available keys in the dictionary. With the Inbuilt method keys(), use the if statement to check if the key is present in the dictionary or not. If the key is present it will print “Present” Otherwise it will print “Not Present”.

How do you check if a value is in a list of dictionaries?

Use any() & List comprehension to check if a value exists in a list of dictionaries.

How do you check if any element of a list is a key in dictionary?

You can check if a key exists in a dictionary using the keys() method and IN operator. The keys() method will return a list of keys available in the dictionary and IF , IN statement will check if the passed key is available in the list. If the key exists, it returns True else, it returns False .

How do you check if a key value pair exists in a dictionary Python?

Python get() method can be used to check whether a particular key is present in the key-value pairs of the dictionary. The get() method actually returns the value associated with the key if the key happens to be present in the dictionary, else it returns 'None'.


1 Answers

Make list1 a set and use dictionary views, and a list comprehension:

set1 = set(list1)
newlist = [key for key, value in dict_a.iteritems() if value.viewkeys() & set1]

In Python 3, use value.keys() and dict_a.items instead.

This tests if there is a set intersection between the dictionary keys and the set of keys you are looking for (an efficient operation).

Demo:

>>> dict_a = {'one': {'bird':2, 'tree':6, 'sky':1, 'TOTAL':9},
...           'two': {'apple':3, 'sky':1, 'TOTAL':4},
...           'three': {'tree':6, 'TOTAL':6},
...           'four': {'nada':1, 'TOTAL':1},
...           'five': {'orange':2, 'bird':3, 'TOTAL':5}
...           }
>>> set1 = {'bird','tree'}
>>> [key for key, value in dict_a.iteritems() if value.viewkeys() & set1]
['three', 'five', 'one']

Note that dictionary ordering is arbitrary (depending on the keys used and dictionary insertion and deletion history), so the output list order may differ.

Technically speaking, you can use your list directly too (value.viewkeys() & list1 works) but making it a set states your intention more clearly.

like image 119
Martijn Pieters Avatar answered Sep 30 '22 04:09

Martijn Pieters