如何通过嵌套字典底层'A'键值调用顶层test_1_floor?
解决方法
首先明确:你拿到的start_node(也就是test_1['test_1_node']['A']对应的字典)本身没有指向顶层test_1的引用,没法直接从它身上获取test_1_floor,得换思路实现,下面是几种可行方案:
方案1:保存节点名称,直接从顶层字典取值
最简单的方式是在获取节点字典时,同时保留节点名称和顶层字典的访问权限,之后直接从顶层取楼层值:
# 记录节点名称和顶层字典 node_name = 'A' start_node = test_1['test_1_node'][node_name] # 直接获取楼层 floor = test_1['test_1_floor']
方案2:给节点字典添加关联信息
修改原始字典结构,给每个节点字典额外添加楼层信息或者顶层字典的引用,这样拿到节点后就能直接取值:
添加楼层信息
# 修改后的test_1_node结构示例 test_1['test_1_node']['A'] = {'B':8, 'C':1, 'D':2, 'floor': test_1['test_1_floor']} # 之后直接从节点取楼层 floor = start_node['floor']
添加顶层字典引用
# 给每个节点添加顶层引用 for node in test_1['test_1_node'].values(): node['_top_dict'] = test_1 # 通过节点获取楼层 floor = start_node['_top_dict']['test_1_floor']
方案3:反向查找节点名称(不推荐,效率低)
如果没办法提前保存节点名称,只能遍历test_1['test_1_node'],找到对应start_node的键,再取顶层楼层:
floor = None for name, node_dict in test_1['test_1_node'].items(): # 用is判断是否是同一个对象 if node_dict is start_node: floor = test_1['test_1_floor'] break
内容的提问来源于stack exchange,提问作者youngsheepp
相关产品推荐
相关产品推荐

