2014-03-13 55 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 =) –