在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
如何创建带有新列表的密钥,然后附加到它?
您可以使用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
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。