将旧样式列表转换为新的更易于理解的格式

时间:2014-03-25 03:58:18

标签: python

旧的列表格式如下:

['Item 1', [['Item 1.1', []], ['Item 1.2', []]]]

它应该被转换为:

['Item 1', ['Item 1.1', 'Item 1.2']]

这个问题来自Django的源代码,但我无法搞清楚。谢谢。

3 个答案:

答案 0 :(得分:1)

#!/usr/bin/python
import itertools

l = ['Item 1', [['Item 1.1', []], ['Item 1.2', []]]]

def con(L):
    res = []
    for x in l:
        if isinstance(x, list):
            temp = list(itertools.chain(*x))
            res.extend(temp)
        else:
            res.append(x)
    return [x for x in res if x]


if __name__ == "__main__":
    print(con(l))

输出是: ['Item 1', 'Item 1.1', 'Item 1.2']

答案 1 :(得分:0)

喜欢这个吗?

test = ['Item 1', [['Item 1.1', []], ['Item 1.2', []]]]

def convert(oldlist):
    return [oldlist[0], [oldlist[1][0][0], oldlist[1][1][0]]]

print(convert(test))

输出是:

['Item 1', ['Item 1.1', 'Item 1.2']]

答案 2 :(得分:0)

另一种选择......这也会保留您要求的格式,并且可以使用任意数量的子项,但由于我缺少一个更复杂的子项的示例,我不知道它是否将持有真实数据......你必须检查!

test = ['Item 1', [['Item 1.1', []], ['Item 1.2', []]]]

def convert(oldlist, newlist):
    for i in range(len(oldlist)):
        if type(oldlist[i]) == list and type(oldlist[i][0]) != list:
            newlist.append(oldlist[i][0])
        elif type(oldlist[i]) != list:
            newlist.append(oldlist[i])
        else:
            newlist.append([])
            convert(oldlist[i], newlist[-1])
    return newlist

print(convert(test, []))

输出是:

['Item 1', ['Item 1.1', 'Item 1.2']]