Форум сайта python.su
0
Привет, подскажите что-то типа, isset в php чтобы можно было проверить, на существование индекса, любую вложенисть словаря. Например так:
test_json.has_key(['response'][0]['user']['first_name'])
Офлайн
173
Вроде такого нет, но можно написать:
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')
from collections import defaultdict def tree(): return defaultdict(tree) lupin = tree() lupin["express"][3] = "stand and deliver"
Отредактировано reclosedev (Май 30, 2012 22:14:55)
Офлайн
0
Если я правильно понял, то функция проверяет только первый ключ, с set который передали. Исправьте пожалуйста, если ошибаюсь. Вы натолкнули на мысль, что можно просто использовать try и ловить KeyError
Офлайн
173
chandНет, по всем проверяет.
Если я правильно понял, то функция проверяет только первый ключ, с set который передали.
chandТочно, можно и так
Вы натолкнули на мысль, что можно просто использовать try и ловить KeyError
. Только если в словаре могут быть списки, то надо еще IndexError ловить. И с функцией можно несколько строчек сэкономить, но это уже от использования зависит.Офлайн
-2
А можно сделать смешанную структуру данных, типа dict(list)?
x.append(3)?
Офлайн