【发布时间】:2012-01-18 15:18:33
【问题描述】:
我正在处理一个 JSON 结构,它以如下结构输出给我:
[{u'item': u'something',
u'data': {
u'other': u'',
u'else':
[
{
u'more': u'even more',
u'argh':
{
...etc..etc
如您所见,这些是嵌套的字典和列表。 关于递归地展平这些有很多讨论,但我还没有找到一个可以处理字典列表,该列表可能又包含列表的字典、列表的列表、字典的字典等;深度未知!在某些情况下,深度可能高达 100 左右。 到目前为止,我一直在尝试这个,但运气不佳(python 2.7.2):
def flatten(structure):
out = []
for item in structure:
if isinstance(item, (list, tuple)):
out.extend(flatten(item))
if isinstance(item, (dict)):
for dictkey in item.keys():
out.extend(flatten(item[dictkey]))
else:
out.append(item)
return out
有什么想法吗?
更新 这非常有效:
def flatten(l):
out = []
if isinstance(l, (list, tuple)):
for item in l:
out.extend(flatten(item))
elif isinstance(l, (dict)):
for dictkey in l.keys():
out.extend(flatten(l[dictkey]))
elif isinstance(l, (str, int, unicode)):
out.append(l)
return out
【问题讨论】:
-
如果您能向我们提供您想要的那种输出示例,将会很有帮助(举一个非常简单的示例 - 可能只有一两个字典/列表深度)
-
一个简单的列表就像 [item0, item1, item2...] 是我的目标
标签: python json list recursion dictionary