class ldapDict():
jsonStruct={}
def add_keys_nested_dict(d, keys):
if len(keys) == 1:
d.setdefault(keys[0], 1)
else:
key = keys[0]
if key not in d:
d[key] = {}
add_keys_nested_dict(d[key], keys[1:])
def listSplit(input):
dnList=input.split(',')
res = [i for i in dnList if i not in ldapSearchBase.split(',')]
if(len(res)<=1):
primaryKey=ldapSearchBase
parent=ldapSearchBase
else:
primaryKey=res[0]
parent=res[1]
return (parent,primaryKey)
def dissectList(input):
x=listSplit(input)
add_keys_nested_dict(ldapDict.jsonStruct,x)
这是获取 ldap“DN”数据并从该路径构建字典的代码部分。输出未将数据嵌套到右侧的“父级”。
{
"dc=ZZ,dc=org": {
"dc=ZZ,dc=org": 1
},
"dc=dows": {
"ou=users": 1,
"ou=userunit": 1,
"ou=unittypemaster": 1
},
"ou=unittypemaster": {
"accessunittypemasterkey=A": 1,
"accessunittypemasterkey=B": 1,
"accessunittypemasterkey=C": 1,
"accessunittypemasterkey=D": 1,
"accessunittypemasterkey=E": 1,
"accessunittypemasterkey=F": 1
}, ...
这是输出的片段。 dc=ZZ,dc=org 是根,但 dc=dows 应嵌套在 dc=ZZ,dc=org 中。同样,ou=unittypemaster 应嵌套到 dc=dows 中的该位置。我知道问题在于我如何查字典,但我无法找出正确的深入方法。
def addEntry(path, itemInfo):
current = ldapDict.jsonStruct
for item in path[:-1]:
if item not in current:
current[item] = {}
current = current[item]
current[path[-1]] = itemInfo
for item in path[:-1]:
current = ldapDict.jsonStruct
for key in path[:-1]:
if key not in current:
current[key] = {}
current = current[key]
def processPath(path,itemInfo):
dn = path["dn"].split(",")
dn.reverse() # Reverse to build from innermost to outermost
addEntry(dn,itemInfo)
这对我来说效果很好。刚刚花了一段时间看这个问题。