我试图浏览一本包含不对称数据的字典,并列出一个独特的标题列表。除了正常的关键:价值项目,字典中的数据还包括其他字典、列表、字典列表、NoneTypes等等。如果可能的话,我希望能够保持键/索引的层次结构。这将用于评估数据的范围及其可用性。数据来自一个JSON文件,其内容可能会发生变化。在
我最近的尝试是通过函数skim()
内的一系列类型检查来实现这一点,如下所示。在
def skim(obj, header='', level=0):
if obj is None:
return
def skim_iterable(iterable):
lvl = level +1
if isinstance(iterable, (list, tuple)):
for value in iterable:
h = ':'.join([header, iterable.index(value)])
return skim(value, header=h, level=lvl)
elif isinstance(iterable, dict):
for key, value in iterable.items():
h = ':'.join([header, key])
return skim(value, header=h, level=lvl)
if isinstance(obj, (int, float, str, bool)):
return ':'.join([header, obj, level])
elif isinstance(obj, (list, dict, tuple)):
return skim_iterable(obj)
其目的是对skim()
进行递归调用,直到传递并返回最深层的键或列表索引位置。skim
有一个处理iterable对象的内部函数,该函数通过每个嵌套的iterable对象向前传递级别和键值或列表索引位置。在
下面是一个例子
^{pr2}$现在我得到了关于上述代码的[None]
的返回,希望得到一些关于如何最好地解决这一问题的帮助或指导。我所期待的是这样的:
['level_0Item_1:level_1Item_1:level_2Item_1',
'level_0Item_1:level_1Item_1:level_2Item_2',
'level_0Item_1:level_1Item_2:level_2Item_1',
'level_0Item_1:level_1Item_2:level_2Item_2',
'level_0Item_2:level_1Item_1',
'level_0Item_2:level_1Item_2',
'level_0Item_3]
在其他资源中,我最近遇到了这个问题(python JSON complex objects (accounting for subclassing)),请阅读它并包含引用。完全公开,我最近才开始编码。在
谢谢你的帮助。在
你可以尝试一下:
测试:
^{pr2}$相关问题 更多 >
编程相关推荐