2013-03-12 86 views
2

如何拆分第二元組拆分元組項目

data = [('152', 'Farko', 'Kier'), ('153', 'Park - Pub')] 

得到這個輸出:

[('152', 'Farko', 'Kier'), ('153', 'Park', 'Pub')] 

我試着這樣說:

lst = [] 
for i in data: 
    if len(i) == 2: 
     i[1] = tuple(i[1].split(' - ')) 
    lst.append(i) 

它會工作,除了它提出異常TypeError: 'tuple' object does not support item assignment。但是我不能指定i = tuple(i[1].split(' - ')),因爲我需要保留元組中位置爲i[0]的數字。列表編譯解決方案將非常受歡迎。建議?

回答

2

你可以使用列表理解:

lst = [t[:1] + tuple(t[1].split(' - ')) if len(t) == 2 else t for t in data] 

,或者你可以調整你的循環來創建一個新的記錄:

for i in data: 
    if len(i) == 2: 
     i = i[:1] + tuple(i[1].split(' - ')) 
    lst.append(i) 
2
newdata = [tuple(s for t in tu for s in t.split(' - ')) for tu in data] 
# [('152', 'Farko', 'Kier'), ('153', 'Park', 'Pub')] 
1

正如你所看到的,你不能修改元組,但是你可以用你想要的數據創建一個新的:

data = [('152', 'Farko', 'Kier'), ('153', 'Park - Pub')] 
lst = [] 
for i in data: 
    if len(i) == 2: 
     i = i[:1] + tuple(i[1].split(' - ')) 
    lst.append(i) 

或者如果您想修改原始列表:

for i, tup in enumerate(data): 
    if len(tup) == 2: 
     data[i] = tup[:1] + tuple(tup[1].split(' - '))