减少嵌套列表,扩展或追加列表的功能

时间:2014-07-29 04:38:57

标签: python json list append extend

我的问题是双重的。首先,Python中是否有一种方法可以减少JSON对象/列表中的冗余嵌套?举个简单的例子,它的行为方式如下:

In [1]: reducer([1])
Out[1]: [1]
In [2]: reducer([[[1]]])
Out[2]: [1]
In [3]: reducer({"menu": {"header": "menu", "items": [[{"id": 81}]]}})
Out[3]: {"menu": {"header": "menu", "items": [{"id": 81}]}}

第二,python中是否有本地extend_or_append函数?该函数的行为如下:

In [1]: tt = []
In [2]: extend_or_append(tt,1)
Out[2]: [1]
In [3]: extend_or_append(tt,[2,3,4,5])
Out[3]: [1,2,3,4,5]

如果此功能不存在,实施它的有效方法是什么?

1 个答案:

答案 0 :(得分:1)

你的第二个问题很简单。

def extend_or_append(this, that):
    if isinstance(that, list):
        this.extend(that)
    else:
        this.append(that)
    return this

第一个是有点棘手

def flatten(l):
    for el in l:
        if isinstance(el, collections.Iterable) and not isinstance(el, basestring):
            for sub in flatten(el):
                yield sub
        else:
            yield el

res = list(flatten([[[[[1]]]]]))