2014-03-25 88 views
0

舊的列表格式看起來像:老式列表轉換爲新的更易於理解的格式

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

而且它應該被轉換爲:

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

這個問題來自Django的烏爾斯河碼但我很難搞清楚。提前感謝。

+2

你可以給你在哪裏看到更多的上下文,你正在努力實現? – karthikr

+1

第一段代碼不是一個列表 - 方括號的開始和結束方式不一致。 – alecxe

+0

我從Django內置的模板過濾器中看到了這一點。現在我在轉換列表時遇到了麻煩,我嘗試了很多方法,包括recusion,但沒有任何幫助。 – Kzing

回答

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']]

+0

非常感謝。這真的有幫助。(對不起,我沒有足夠的權限來投票答覆) – Kzing

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

但是,這不是他要求的輸出... – Roberto

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']]