我正在使用python进行身份验证。我需要从LDAP中检索组。我得到的回应是List的形式。但是我需要它以Dictionary的形式,其中Key应该是“cn”值,Value应该是“uid”。
怎么做。
[
[
('ou=mathematicians,
dc=example,
dc=com',
{
'objectClass': [
'groupOfUniqueNames',
'top'
],
'ou': [
'mathematicians'
],
'uniqueMember': [
'uid=euclid,
dc=example,
dc=com',
'uid=riemann,
dc=example,
dc=com',
'uid=euler,
dc=example,
dc=com',
'uid=gauss,
dc=example,
dc=com',
'uid=test,
dc=example,
dc=com'
],
'cn': [
'Mathematicians'
]
})
],
[
('ou=scientists,
dc=example,
dc=com',
{
'objectClass': [
'groupOfUniqueNames',
'top'
],
'ou': [
'scientists'
],
'uniqueMember': [
'uid=einstein,
dc=example,
dc=com',
'uid=galieleo,
dc=example,
dc=com',
'uid=tesla,
dc=example,
dc=com',
'uid=newton,
dc=example,
dc=com'
],
'cn': [
'Scientists'
]
})
]
]
答案 0 :(得分:0)
这看起来像一个非常简单的字符串解析案例。在这方面,Python非常强大。我建议您查看re module以获得更多高级处理。在你的实例中,它看起来只是迭代和扁平化的问题 - 所以像这样:
import re
def flatten_LDAP(data):
response = {}
# Iterate through each item
for dirty_el in data:
# Manually flatten. Not robust, but good enough
cn = dirty_el[0][1]['cn'][0]
# Get users in list comprehension
users = [
# Split user from the string
re.split(r'=|,',member)[1]
# Iterate from flattened 'uniqueMember'
for member in dirty_el[0][1]['uniqueMember']
]
# Add to dictionary
response[cn] = users
# Return
return response
应该做的伎俩
我确信你可以在LDAP的流媒体层上获得更多的花哨和处理 - 但我确信这就足够了。