如何动态创建并引用值为字典的嵌套字典及其中的列表?
动态构建嵌套目录字典的解决方法
错误原因分析
你代码里的TypeError是因为错误的字典访问方式:mydirectory[my_key][my_value][inner_key]中,mydirectory[my_key]已经指向你创建的空字典my_value,不需要再用my_value作为键去访问——字典的键必须是可哈希类型(如字符串、数字),而字典本身不可哈希,所以触发了错误。正确的写法应该是直接通过键名访问内层字典,比如mydirectory[my_key][inner_key]。
基础动态构建示例
先修正你的初始代码,实现root条目的正确创建:
mydirectory = {} # 创建root条目 my_key = 'root' mydirectory[my_key] = {'parent': 'none', 'children': []} # 给root的children添加子目录 mydirectory[my_key]['children'].extend(['folder1', 'folder2']) print(mydirectory)
运行后会输出:
{'root': {'parent': 'none', 'children': ['folder1', 'folder2']}}
适配动态键名的通用构建方法
如果目录名(如folder1、folder2)来自外部列表,你可以先定义一个包含所有目录关系的数据源(模拟实际场景的输入),然后循环遍历构建字典:
假设你的目录关系数据是这样的列表:
dir_data = [ {'name': 'root', 'parent': 'none', 'children': ['folder1', 'folder2']}, {'name': 'folder1', 'parent': 'root', 'children': ['folder3']}, {'name': 'folder2', 'parent': 'root', 'children': []}, {'name': 'folder3', 'parent': 'folder1', 'children': []} ]
然后通过循环动态构建字典:
mydirectory = {} for item in dir_data: dir_name = item['name'] # 为每个目录创建对应的子字典 mydirectory[dir_name] = { 'parent': item['parent'], 'children': item['children'].copy() # 复制列表避免后续修改影响原数据 } print(mydirectory)
这样就能生成你想要的嵌套字典结构,而且完全不需要硬编码每个键名。
动态修改children列表
如果需要在后续逻辑中给某个目录的children添加新元素,直接通过键名定位后操作列表即可:
# 给folder1添加新子目录folder4 mydirectory['folder1']['children'].append('folder4')
内容的提问来源于stack exchange,提问作者Roberto
相关产品推荐
相关产品推荐

