Я имею дело со структурой 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
Есть идеи?
UPDATE
Это в значительной степени работает:
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