[英]Python List to Dictionary with Key Value
我正在使用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'
]
})
]
]
这看起来像是一个非常简单的字符串解析案例。 Python在这方面非常强大。 我建议您查看re模块以进行更高级的处理。 在您的实例中,这看起来像是迭代和展平的问题,因此是这样的:
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的流传输层上花更多的钱来处理它,但是我相信这足够了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.