2014-03-13 144 views
0

我有一個數組,至少包含我的csv文件中的整個列,由於csv由用戶的聯繫信息和當前組組成,因此有很多重複項。Python從數組中刪除重複

因此,CSV中的用戶是在一個組中,但有時多個用戶在同一個組中,現在這個python腳本的要點是將所有在同一組中的用戶排在一起。我會更新主線程,所以它不會混淆更多的對不起。

該腳本的最終目標是將該組與該組中的用戶的電話號碼一起放入此行中。

GroupName, PhoneNumber1, PhoneNumber2, PhoneNumber3, PhoneNumber4, etc 

例子:

Name, email, phonenumber, **group** 
name1, name2, number1,  ExampleGroup 

所以我試圖用這個排序是:https://wiki.python.org/moin/HowTo/Sorting

,並返回:

['a', ' ', 'E', 'g', 'i', 's', 'm', 'M', 'L', 'o', 'l', 'p', 'S', 'R', 't', 'h', 'e', 'n'] 

我使用的代碼此刻:

import csv 
    with open('Configtool.csv', 'rb') as f: 
     reader = csv.reader(f, delimiter=';', quoting=csv.QUOTE_NONE) 
     for row in reader: 
     groupname = row[5] 
     #print groupname 
     sortedgroup = list(set(groupname)) 
     print sortedgroup 

你的幫助是非常讚賞,

請注意,我是新來的蟒蛇所以請去容易對我:P

+1

說不上你是怎麼知道'list(set(groupname))'是一種排序的方法。沒有任何東西會出現在您鏈接的頁面上。 – user2357112

+0

文件中有什麼重複..整個列是否重複或列的元素是否重複..? –

+0

我從另一個stackoverflow線程得到它,發現類似的問題。 @Rajsubit因此,CSV中的用戶是在一個組中,但有時多個用戶在同一個組中,現在這個python腳本的要點是將所有在同一組中的用戶排在一起。我會更新主線程,所以它不會混淆更多的對不起。 –

回答

0

您可以使用itertools.groupby獲得與同組中的所有行和然後使用字典理解來創建將組映射到電話號碼的字典。

import itertools 
groups = itertools.groupby(reader, key=lambda row: row[3]) 
d = {group: [row[2] for row in rows] for (group, rows) in groups} 

(假設在3位置和行2位置的電話號碼。該集團還您可能需要刪除你的循環,否則reader迭代器已經被耗盡。)

+0

這個功能在一定程度上可以返回組中的一個組和一個電話號碼,然後它將返回相同的組,但是使用另一個電話號碼。 這些組不能重複,並且需要返回一行中具有相同組的所有用戶的所有號碼。 –

+0

如果這些組合真的是一樣的,那麼它就會起作用。 csv中是否可能有空格,即是否有像「group1」和「group1」這樣的組?使用這個:'lines_clean = [map(str.strip,row)for reader in reader]' –

+0

That worked thanks =) –