繁体   English   中英

带有键值的Python列表字典

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM