2012-08-28 20 views
-4

這讓我瘋狂。我有一個從csv中提取數據的腳本。對於每一行,它都會成爲一個列表。原因是我想合併基於命令行參數的兩個項目。從不同區域列表合併項目Python

這裏是我的列表爲例:

row = ['city', 'state', 'zip', 'zippostal', 'company'] 

嗯,我知道,如果我做一個上一行加入[0]和行[2]我會得到

row = ['citystatezip', 'zippostal', 'company'] 

那麼萬一我想這....

row = ['companycityzip', 'state', 'zippostal'] 

我怎麼能這樣做?

編輯:

對不起,我不是故意要簡短。我所擁有的是一個帶有一堆數據的csv文件,有時候城市狀態和zip會在不同的字段中,但我需要通過a或者合併它們 - 取決於需要什麼。所以我所做的就是把它們放到一個列表中,並根據命令行參數選擇它們在哪些列中,我需要它們合併爲Ex。

列A列B列C列d ...... 市州郵政編碼

我需要一個 「」 列合併到b中。那麼工作正常,但有時列f將是城市和列將是國家。所以如何將它們合併到一個列表中,並且這兩個值都在列a中結束,但仍然返回行的其餘部分減去更新後的值。

+1

你是什麼意思「上排加入[0]和行[2]「?而且你必須比「我想要這個」更具體:你對通過命令行參數進行選擇意味着什麼?你目前使用什麼代碼? –

+2

我相信,如果你嘗試制定你的任務沒有這個晦澀的例子,這將是90%的解決方案。 –

+0

是的,請更好地描述你正在尋找的行爲,最好用你已經試過的代碼示例。至少在一般情況下,命令行參數描述了什麼,格式是什麼?轉換列表的規則是什麼? –

回答

1

也許這樣的事情?:

>>> row = ['city', 'state', 'zip', 'zippostal', 'company'] 
>>> joins = [[4, 0, 2], [1], [3]] 
>>> [''.join(row[i] for i in indices) for indices in joins] 
['companycityzip', 'state', 'zippostal'] 

作爲一個功能:

def custom_join(row, *joins): 
    return [''.join(row[i] for i in indices) for indices in joins] 

例子:

>>> row = ['city', 'state', 'zip', 'zippostal', 'company'] 
>>> custom_join(row, [0, 1, 2], [3], [4]) 
['citystatezip', 'zippostal', 'company'] 
>>> custom_join(row, [-1, 0, 2], [1], [-2]) 
['companycityzip', 'state', 'zippostal'] 

編輯:這裏是將返回其餘版本執行連接後的列表:

def custom_join2(row, *joins): 
    result = [''.join(row[i] for i in indices) for indices in joins] 
    seen = set(i if i >= 0 else len(row)+i for indices in joins for i in indices) 
    result.extend(v for i, v in enumerate(row) if i not in seen) 
    return result 

>>> custom_join2(row, [-1, 0, 2]) 
['companycityzip', 'state', 'zippostal'] 
+0

這正是我所需要的。非常感謝你。我還有另外一個問題。無論排名有多少,是否有辦法做到這一點。因爲這個行可能有4個項目,有時候有200個項目。但根據給出的參數,它只會做到這些。 – thedemon

+0

@thedemon編輯我的答案與替代版本,我認爲應該做你正在尋找。 –

+0

完美的工作正是我所需要的,非常感謝你的幫助! – thedemon

0

這是什麼你問我最好的猜測:

row = ['city', 'state', 'zip', 'zippostal', 'company'] 
temp_list = [] 
temp_str = row[4]+row[0]+row[2] 
temp_list.append(temp_str) 
temp_list.append(row[1]) 
temp_list.append(row[3]) 
row = temp_list # ['companycityzip', 'state', 'zippostal'] 

雖然我覺得你想要的東西動態此不