将数据嵌套到Python字典中的正确方法是什么?

问题描述 投票:0回答:1
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 中的该位置。我知道问题在于我如何查字典,但我无法找出正确的深入方法。

python-3.x dictionary
1个回答
0
投票
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)

这对我来说效果很好。刚刚花了一段时间看这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.