2017-02-23 79 views
0

我正在使用python進行身份驗證。我需要從LDAP中檢索組。我得到的迴應是以List的形式。但我需要它的字典形式,其中密鑰應該是「cn」值和值應該是「uid」。Python列表到關鍵字值的字典

如何做到這一點。

[ 
     [ 
      ('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

字典: {科學家=愛因斯坦,galieleo,特斯拉,牛頓} {數學家=歐幾里得,高斯,測試} 關鍵應該是Cn和值應該是UId。這是預期的 –

回答

0

這看起來像是一個非常簡單的字符串解析案例。 Python在這方面非常強大。我建議您查看re module以獲得更多高級處理。在你的情況下,它看起來像只是迭代的問題和flattening-所以是這樣的:

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的流媒體層 - 但我相信這就足夠了。