2017-02-23 12 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

Dict: {科学者= einstein、galieleo、テスラ、ニュートン} {Mathematicians =ユークラッド、ガウス、テスト} キーは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からのストリーミングレイヤーですが、これで十分でしょう。

関連する問題