Запрос LDAP Python и преобразование соответствующего словаря - PullRequest
1 голос
/ 20 августа 2011

Извините, я не мог придумать лучшего названия для моего вопроса.

Так что я начинающий в Python, и я действительно пытаюсь научиться его использовать. Моя текущая проблема связана с созданием простого способа уменьшить результаты, полученные от запроса Python.

Если я понимаю, с чем я имею дело, запрос LDAP возвращает List из List из Dictionary, где значение в Dictionary равно List. Это очень много вещей, которые нужно пройти, поэтому я подумал, что должен быть хороший магический способ Python, чтобы преобразовать это в List из Dictionary, где значение Dictionary - это просто простая строка.

В настоящее время мой код просто для получения List из Dictionary, но у меня все еще есть значения Dictionary как List самих

for item in data:
    results.append(item[1])

Еще раз, я новичок, поэтому я не совсем понимаю, что делать дальше. Я также использую Django, если это поможет кому-нибудь понять мое положение.

Редактировать (пример добавленных данных):

Структура примерно такая:

data[index][1] = {'uid': ['restest'], 'mail': [''], 'givenName': ['Research'], 'cn': ['Research Test Account'], 'sn': ['Account']}

Я бы хотел, чтобы вместо 'givenName': ['Research'] было 'givenName': 'Reaseach'

1 Ответ

0 голосов
/ 20 августа 2011

Ха-ха, я не уверен, что вам когда-нибудь нужна такая сложная структура данных.Рассмотрите возможность рефакторинга вашего кода, чтобы облегчить понимание ваших структур данных.Читайте: объектно-ориентированное программирование, классы, принципы функционального программирования.

Вот ответ, если вы просто хотите сделать это для одного словаря:

data = {k:v[0] for (k,v) in data.items()}

Вот оно в действии:

>>> data = {'uid': ['restest'], 'mail': [''], 'givenName': ['Research'], 'cn': ['Research Test Account'], 'sn': ['Account']}
>>> data
{'mail': [''], 'sn': ['Account'], 'givenName': ['Research'], 'uid': ['restest'], 'cn': ['Research Test Account']}
>>> data = {k:v[0] for (k,v) in data.items()}
>>> data
{'mail': '', 'givenName': 'Research', 'cn': 'Research Test Account', 'sn': 'Account', 'uid': 'restest'}

Все, что вы делаете, это переназначаете свой словарь на первый элемент каждого списка.Если вы хотите пройтись по всем уровням своей структуры и сделать это, просто вложите вышеупомянутое в некоторые списки:

[[[{k:v[0] for (k,v) in change_dict.items()} for change_dict in list_of_dicts]
  for list_of_dicts in list_of_lists]
 for list_of_lists in mydata]

Не так уж плохо вкладывать так много списков, когда вы только делаетечто-то вроде «листового» элемента в ваших данных, но это будет очень грязно, если вы попытаетесь манипулировать вашими структурами данных на каждом уровне.Смотрите мой комментарий в начале.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...