Skip to content Skip to sidebar Skip to footer

How To Know If A Value Is Inside A Nested Dictionary?

I'm new to Python and I'm still learning how to use. I have the follow dictionary: dic = {'0': {'text': 'a', 'lang': 'es', 'rating': '4'}, '1': {'text': 'b', 'lang': 'es', 'rating'

Solution 1:

You can use any:

dic = {'0': {'text': 'a', 'lang': 'es', 'rating': '4'}, '1': {'text': 'b', 'lang': 'es', 'rating': '3'}, '2': {'text': 'c', 'lang': 'es', 'rating': '1'}, '3': {'text': 'd', 'lang': 'es', 'rating': '2'}, '4': {'text': 'e', 'lang': 'es', 'rating': '5'}}
result = any('a' in d.values() for d in dic.values())

Solution 2:

You can use any with a generator comprehension, as suggested by @Ajax1234.

Or, if you do this repeatedly, you can calculate a set of values and check for membership with O(1) complexity. itertool.chain is a useful tool to combine nested values:

from itertools import chain

values=set(chain.from_iterable(i.values() for i in dic.values()))

res ='a'invalues  # True

Solution 3:

Starting first from what you have tried, you could indeed:

  • Use a for loop to iterate over the values of dic, that are dictionaries too.
  • Check inside each dictionary if the value of the key 'text' equals 'a'.
  • If yes, then print 'Yes' and stop the loop.
  • If the loop ends without any match, then print 'No'.

Let's do it with a beautiful for/else statement:

for d in dic.values():
    if d['text'] == 'a':
        print("Yes")
        breakelse:
    print("No")

To go further, you could also:

  • use comprehension to perform the for loop and the == operation in a smarter Python way,
  • and use any to replace the if and break statements by a smarter Python built-in function.

This shorter code will in fact do exactly the same things as previous one, in a really pythonic way:

ifany(d['text'] == 'a'for d in dic.values()):
    print("Yes")
else:
    print("No")

Enjoy !

Solution 4:

You are treating the dictionary as a list. You cannot index into a dictionary, like this:

dic[0]

But you can get the value from a given key, like so:

dic["0"] # yields {'text': 'a', 'lang': 'es', 'rating': '4'}

As such, modify your for loop as follows:

for i in dic:
    ...

Solution 5:

if you are sure that the string you are looking for will no be in key names, then another simple solution is converting whole dict to str and searching for string

if'a'instr(dic):
    print("a is there")

Post a Comment for "How To Know If A Value Is Inside A Nested Dictionary?"