开发者社区> 问答> 正文

Python dict如何创建密钥或将元素附加到密钥

for循环中创建键时,如何附加到字典键列表中?

* 背景:

我正在将.xml文件解析为嵌套的OrderedDict,然后将OrderedDict递归展平到具有三个元素的list列表中:[level_depth,key,value]。

这是我的递归函数:

def iterdict(d, lvl, ARR):
    for k, v in d.items():
        if isinstance(v, dict):
            lvl += 1
            iterdict(v, lvl, ARR)
        elif isinstance(v, list):
            for i in v:
                if isinstance(i, dict):
                    lvl += 1
                    iterdict(i, lvl, ARR)
        else:
            print(lvl, k, v)
            ARR.append([lvl, k, v])
    return ARR

这是我尝试创建一个将所有level_depth值分组为单个键的字典:

A = iterdict(my_dict, 0, [])

A_dict = {}
for i in A:
    A_dict[str(i[0])].append(i[:-1])

错误:

A_dict [str(i [0])。append([i [:-1]])KeyError:'1'

这是*A*列表的示例输出:

[...,  [17, '@Name', 'ExternalVisible'], [17, '@SystemDefined', 'true'], [17, '#text', 'false'], 
[18, '@Name', 'ExternalWritable'], [18, '@SystemDefined', 'true'], [18, '#text', 'false'], 
[19, '@Informative', 'true'], [19, '@Name', 'UserVisible'], ...]

* 查询明细

因此,我知道会出现键错误,因为该键上没有要追加的列表。如何创建带有新列表的密钥,然后附加到它?

使用sample output的结果示例:

A_dict = {..., '17': [['@Name', 'ExternalVisible'], ['@SystemDefined', 'true'], ['#text', 'false']]...}

对于最佳实践的任何建议也将不胜感激,在此先感谢您。

问题来源:stackoverflow

展开
收起
is大龙 2020-03-24 19:16:09 599 0
1 条回答
写回答
取消 提交回答
  • 如何创建带有新列表的密钥,然后附加到它?

    您可以使用dict.setdefault:

    A_dict = {}
    for i in A:
        A_dict.setdefault(str(i[0]), []).append(i[:-1])
    

    或者您可以使用collections.defaultdict:

     import collections
     A_dict = collections.defaultdict(list)
    

    回答来源:stackoverflow

    2020-03-24 19:16:18
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
From Python Scikit-Learn to Sc 立即下载
Data Pre-Processing in Python: 立即下载
双剑合璧-Python和大数据计算平台的结合 立即下载