将多个词典作为值插入到单个键中

2024-10-02 16:30:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要一组{a:{}{b:{},{c:{}}}形式的嵌套字典,其中a、b和c是键。我尝试了以下代码。你知道吗

from collections import defaultdict
def dictizeString(string,dictionary) :
    while string.startswith('/'):
        string = string[1:]
    parts = string.split('/',1)

    if len(parts)>1:
        branch = dictionary.setdefault(parts[0],[dict()])
        dictionary[parts[0]].append(dict())
        dictizeString(parts[1], branch)
    else:
        if dictionary.has_key(parts[0]):
            dictionary[parts[0]]=dict()
        else:
            dictionary[parts[0]]=[dict()]
            dictionary[parts[0]].append(dict())               


d={}

dictizeString('/a/b/c/d', d)
print d

执行此代码会导致错误“list”对象没有属性“setdefault”。该代码适用于第一次迭代(即a),但在第二次迭代(即b)时抛出上述错误。你知道吗

在代码的最后6行中,append功能适用于else部分,我尝试在if中使用相同的逻辑,但它抛出了一个错误。你知道吗


Tags: 代码frombranchstringdictionaryif字典错误
2条回答

尝试:

from collections import defaultdict
def dictizeString(string,dictionary) :
    while string.startswith('/'):
        string = string[1:]
    parts = string.split('/',1)

    if len(parts)>1:
        branch = dictionary.setdefault(parts[0],[dict()])
        dictionary[parts[0]].append(dict())
        dictizeString(parts[1], branch[1]) # < - branch -> branch[1]
    else:
        if dictionary.has_key(parts[0]):
            dictionary[parts[0]]=dict()
        else:
            dictionary[parts[0]]=[dict()]
            dictionary[parts[0]].append(dict())               


d={}

dictizeString('/a/b/c/d', d)
print d

第7行有一条语句,将默认值设置为字典列表,但随后您尝试继续使用它所期望的字典所在的函数。你知道吗

我知道你已经找到了答案,但你也可以做到:

def dictizeString(path, dictionary):
    keys = path.lstrip('/').split('/')
    current_key = None
    for key in keys:
        if current_key is None:
            current_key = dictionary.setdefault(key, {})
        else:
            current_key = current_key.setdefault(key, {})

d = {}
dictizeString('/a/b/c/d', d)
print d

输出变成:{'a': {'b': {'c': {'d': {}}}}}

相关问题 更多 >