Я новичок в Python и пытаюсь найти самый Pythonic способ разобрать ответ из запроса LDAP. Пока что у меня есть работы, но я хотел бы сделать его более аккуратным, если это возможно. Мои данные ответа заключается в следующем:Каков наилучший Pythonic способ разобрать эти данные?
"[[('CN=LName\\, FName,OU=MinorUserGroup,OU=MajorUserGroup,DC=my,DC=company,DC=com', {'department': ['theDepartment'], 'mail': ['[email protected]']})]]"
Из этих данных я действительно заинтересован только в полях внутри {}
, так что я могу бросить его в словарь ...
"department:theDepartment,mail:[email protected]"
Я «Сейчас я чувствую (и выглядит) действительно грубой силой, но работает. Я добавил дополнительные комментарии и результаты вывода на основе того, что каждый шаг делает, чтобы попытаться разработать этот беспорядок.
#Original String
#"[[('CN=LName\\, FName,OU=MinorUserGroup,OU=MajorUserGroup,DC=my,DC=company,DC=com', {'department': ['theDepartment'], 'mail': ['[email protected]']})]]"
#split at open {, take the latter half
myDetails = str(result_set[0]).split('{')
#myDetails[1] = ["'department': ['theDepartment'], 'mail': ['[email protected]']})]]"]
#split at close }, take the former half
myDetails = str(myDetails[1]).split('}')
#myDetails[0] = ["'department': ['theDepartment'], 'mail': ['[email protected]']"]
#split at comma to separate the two response fields
myDetails = str(myDetails[0]).split(',')
#myDetails = ["'department': ['theDepartment']","'mail': ['[email protected]']"]
#clean up the first response field
myDetails[0] = str(myDetails[0]).translate(None, "'").translate(None," [").translate(None,"]")
#myDetails[0] = ["department:theDepartment"]
#clean up the second response field
myDetails[1] = str(myDetails[1]).translate(None," '").translate(None, "'").translate(None,"[").translate(None,"]")
#myDetails[1] = ["mail:[email protected]"]
Хотя я большой поклонник «если он не сломался, не исправляйте его» Я больше поклонник эффективности.
EDIT Это в конечном итоге работает для меня в принятом ответе ниже по @Mario
myUser = ast.literal_eval(str(result_set[0]))[0][1]
myUserDict = { k: v[0] for k, v in myUser.iteritems() }
Похоже на то, что может сделать анализатор JSON. Кроме того, поскольку вас интересует только то, что находится между фигурными фигурными скобками, вы можете создать простое регулярное выражение для его синтаксического анализа. –
Рассмотрите отчетный ответ [на этот вопрос] (http://stackoverflow.com/questions/13297654/convert-string-into-dictionary-with-python). Кажется, что это работает для 'x = '{' department ': [' theDepartment '],' mail ': [' [email protected] ']}" ' – jedwards
Если весь вывод был действительным, это будет легко. ;) – Dan