Найти - Пользователи
Полная версия: Проверка ключа в словаре
Начало » Python для новичков » Проверка ключа в словаре
1
chand
Привет, подскажите что-то типа, isset в php чтобы можно было проверить, на существование индекса, любую вложенисть словаря. Например так:
test_json.has_key(['response'][0]['user']['first_name'])
reclosedev
Вроде такого нет, но можно написать:
def has_nested_key(dict_or_list, *keys):
    for key in keys:
        try:
            dict_or_list = dict_or_list[key]
        except (KeyError, IndexError):
            return False
    return True
 
# usage
data = {'response': [{'user':{'first_name': 'some_name'}}]}
 
print has_nested_key(data, 'response', 0, 'user', 'first_name')
print has_nested_key(data, 'response', 0, 'user', 'last_name')
print has_nested_key(data, 'response', 1, 'user', 'first_name')

upd:
Еще можно collections.defaultdict использовать

Недавно в rss упало:
http://blogs.fluidinfo.com/terry/2012/05/26/autovivification-in-python-nested-defaultdicts-with-a-specific-final-type/
from collections import defaultdict
def tree():
    return defaultdict(tree)
 
lupin = tree()
lupin["express"][3] = "stand and deliver"
chand
Если я правильно понял, то функция проверяет только первый ключ, с set который передали. Исправьте пожалуйста, если ошибаюсь. Вы натолкнули на мысль, что можно просто использовать try и ловить KeyError
reclosedev
chand
Если я правильно понял, то функция проверяет только первый ключ, с set который передали.
Нет, по всем проверяет.
chand
Вы натолкнули на мысль, что можно просто использовать try и ловить KeyError
Точно, можно и так . Только если в словаре могут быть списки, то надо еще IndexError ловить. И с функцией можно несколько строчек сэкономить, но это уже от использования зависит.
asilyator
А можно сделать смешанную структуру данных, типа dict(list)?

x.append(3)?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB