Как мне определить, является ли значение определенного ключа в моем словаре словарем, чтобы я мог рекурсивно решать вопросы программирования на основе этого?

#python #dictionary #object

#python #словарь #объект

Вопрос:

Итак, я хочу убедиться, что конкретное значение key является примитивным типом данных, то есть не словарем. Если это словарь, я хочу рекурсивно проверять, пока не дойду до конца. (базовый вариант -: в значениях нет словаря) Допустим, у меня есть этот код

 dict ={ 
    "Roll No" : "1",
    "Car"     : {
         "Ferrari"  : "12",
         "Pontiac"  : "15"`
     },
     "Budget" : "3"
   }
  

Как мне получить «Car» в качестве ключа, тип данных значений которого является словарным?

И как мне получить доступ к вложенному словарю?

 { "Car":{
    "Ferrari":"12",
   "Pontiac":"15"
   },
} 
  

Комментарии:

1. Что не так с dict['Car'] ?

2. Я не думаю, что это сработает. Я имею в виду, что я хочу сделать это рекурсивно, поэтому, если в Car возможны подразделы, я бы застрял? если Car может быть его собственным словарем, к которому я могу получить доступ, тогда это сработает!

3. @AkshayNevrekar На самом деле dict[‘Car’] будет полезен для получения значений и проверки, действительно ли они являются словарем, а не строкой. Спасибо!

Ответ №1:

Вы можете использовать type() функцию python, чтобы решить, является ли элемент словарем, и, следовательно, когда выполнять рекурсию:

 searchDictionary( haystack, needle ):
    for key in haystack.keys():
        if type( haystack[key] ) is dict:
            searchDictionary( haystack[key], needle )
        elif type( haystack[key] ) is str:
            # TODO - match string
            if ( haystack[key] == needle ):
                print( "Found at " str(key) )
        elif type( haystack[key] ) is int:
            # TODO - match integer
            pass
  

Существует множество других способов перебора словаря, но я выбрал этот метод, чтобы проиллюстрировать ответ в удобочитаемой форме.