未知维Python字典中递归访问项

2024-10-06 15:25:51 发布

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

我试图获取一个对象列表,并根据对象的“键”将它们重新排列到嵌套字典的字典中。我遇到的问题是能够访问像。。。在

hier_data['1']['Assets']['1.2']['Assets']['1.2.3']['Assets']['1.2.3.4']['Assets']

…动态地添加。有没有一种方法可以构建某种递归函数,根据键遍历字典?例如,如果我需要添加键为“1.2.3.4.5”的对象,有没有办法。。。在

^{pr2}$

…动态递归?在

我需要注意的是,我开始使用的列表是按键排序的,这样我就可以一直将当前对象的父级“资产”字典添加到中。在


Tags: 对象方法列表data字典排序动态资产
2条回答

您可以使用递归defaultdict

>>> from collections import defaultdict
>>> l = lambda: defaultdict(l)
>>> d = defaultdict(l)
>>> d['123']['4234']['asd']['dsaf'] = 4
>>> d
    defaultdict(<function <lambda> at 0x15f9578>, {'123': defaultdict(<function <lambda> at 0x15f9578>, {'4234': defaultdict(<function <lambda> at 0x15f9578>, {'asd': defaultdict(<function <lambda> at 0x15f9578>, {'dsaf': 4})})})})

原来我遇到的麻烦比我想象的要简单。我只需要这样做:

hier_data = {}
for id in sorted(data.iterkeys()):
  key = id.split('.')
  data[id]['Assets'] = {}
  insert_point = hier_data
  for i in range(len(key)/2-1):
    insert_point = insert_point['.'.join(key[0:2*i+2])]['Assets']
  insert_point[id] = data[id]
return hier_data

我认为从字典中获取键(例如hier_data[...])会在字典中返回该对象的副本,而不是指向该对象的指针。结果我只需要遍历我的断键,将insert_point光标移动到正确的位置以添加到我的对象中。在

相关问题 更多 >