2014-01-24 93 views
1

我有兩個列表,一個不嵌套,另一個是。在python中拼合嵌套的字符串列表

carNames = [] 
priceAndMileage = [] 

的數據是這樣的,合併:

[(u'2011 Toyota Camry SE V6', [u'$14,995', u'31,750']), (u'2012 Toyota Camry L', [u'$15,993', u'27,381'])] 

我的代碼是:

combinedData = zip(carNames, priceAndMileage) 

writer = csv.writer(open("dict.csv", 'r+')) 

for dataList in combinedData: 
    dataList = [dataList[0]] + [y for x in dataList[1] for y in x] 
    writer.writerow(dataList) 

我壓扁DataList控件,但它遍歷每個人的性格,而不是僅僅的項目。我如何才能生成結果,如拼合任務不會使每個字符變平,而只是變成子項列表?

而我的結果是csv文件:

2011 Toyota Camry SE V6,$,1,4,",",9,9,5,3,1,",",7,5,0 
2012 Toyota Camry L,$,1,5,",",9,9,3,2,7,",",3,8,1 

但我需要:

2011 Toyota Camry SE V6, $14,995, 31,750 
2012 Toyota Camry L, $15,993, 27,381 

回答

3

爲了展平dataList您可以連接[dataList[0]]dataList[1]

for dataList in combinedData: 
     dataList = [dataList[0]] + dataList[1] 
     writer.writerow(dataList) 

說明

DataList的是,例如,(u'2011 Toyota Camry SE V6', [u'$14,995', u'31,750']) (順便說一下dataList不是list,這是一個tuple - 列表基本上是一個不可改變的版本)

我們希望得到的是一個扁平dataList,即[u'2011 Toyota Camry SE V6', u'$14,995', u'31,750']

[dataList[0]]是一個列表只有一個元素:[u'2011 Toyota Camry SE V6']

dataList[1]是有兩個元素的列表:[u'$14,995', u'31,750']

[dataList[0]] + dataList[1]將串聯這兩個名單,我們將扁平dataList

+0

這個工作 - 你能解釋一下到底爲什麼? –

+0

完美!謝謝。 –

+0

@ChristopherWallace在你的列表理解中,你基本上有一個double for循環,所以你迭代列表得到兩個字符串,然後遍歷每個字符串並獲取它們的每個字符。 –

0

添加到薛明的回答,如果你想有一個字符串,你可以這樣做:

for dataList in combinedData: 
    dataList = [dataList[0]] + dataList[1] 

datastr = '' 
for i in dataList: 
    datastr = datastr + ' ' + i 
+0

甚至是'datastr + =''+ i' – wflynny