массивов? То есть, если данные на глубине 3х шагов например?
Сейчас сделал так:
for res in resources:
d = {}
try: d.update({'cn': (res[1]['cn'][0]).decode('utf-8') })
except: pass
try: d.update({'displayName': (res[1]['displayName'][0]).decode('utf-8') })
except: pass
try: d.update({'description': (res[1]['description'][0]).decode('utf-8') })
except: pass
data.append(d)
но кажется не очень тру
dpath посмотри.
хмм. целую либо тащить ради такого. А мой вариант он как вообще?
Я обычно делаю DefaultDict
опять я неправильно задал вопрос. Проблема не в формировании дикта, а вытаскивание с результата (лдапа) - то есть такого поля вообще не может быть в теории.
In [71]: def _default_dict(): return collections.defaultdict(_default_dict) In [72]: config = _default_dict() In [73]: config['a']['b']['c'] Out[73]: defaultdict(<function __main__._default_dict()>, {}) In [74]: config['a']['b']['c'] or 'default' Out[74]: 'default'
Хз. Там что-то странное. Тебя просто try не устроит?
у меня так и есть, тупо try и pass пустой
вот как тут, но вдруг есть что-то красивое =)
Вместо res[1] распакуй свой кортеж. Рекомендация. Дальше, если это словарь, то можешь методом get организовать безопасное чтение.
Для словарей есть красивый метод get. Но ты говорил про массивы.
Три цикла for 👌
Обсуждают сегодня