Python:查找重复项

时间:2014-11-13 14:33:45

标签: python duplicates

我在csv的列中有数据。我有一个来自它的两列的数组。我使用列表列表。我有这样的字符串列表                 [A,BCDEF],[Z,Wexy] 我想识别重复的条目,即[A,Bcdef]和[A,Bcdef]

import csv
import StringIO
import os, sys
import hashlib
from collections import Counter
from collections import defaultdict
from itertools import takewhile, count
columns = defaultdict(list)
with open('person.csv','rU') as f:
    reader = csv.DictReader(f) # read rows into a dictionary format
listoflists = [];
    for row in reader: # read a row as {column1: value1, column2: value2,...}

        a_list = [];
        for (c,n) in row.items():
            if c =="firstName":
                try:
                    a_list.append(n[0])
                except IndexError:
                    pass    
        for (c,n) in row.items():
            if c=="lastName":
                try:
                    a_list.append(n);
                except IndexError:
                    pass
        #print list(a_list); 
        listoflists.append(a_list);
        #i += 1      
    print len(listoflists);

我已尝试过这里提出的几个解决方案

  • 使用设置(listoflist)始终返回:不可用类型:' list'
  • 功能:退货:' list'对象没有属性'值'

例如:

results = list(filter(lambda x: len(x) > 1, dict1.values()))
if len(results) > 0:
        print('Duplicates Found:')
        print('The following files are identical.  the content is   identical')
        print('___________________')
        for result in results:
            for subresult in result:
                print('\t\t%s' % subresult)
            print('___________________')
    else:
        print('No duplicate files found.')

欢迎任何建议。

4 个答案:

答案 0 :(得分:1)

您可以使用可清除的元组而不是列表。

答案 1 :(得分:0)

您可以构建一组列表的字符串表示形式,这些表示形式非常易于使用。

答案 2 :(得分:0)

l = [ ['A', "BCE"], ["B", "CEF"], ['A', 'BCE'] ]
res = []
dups = []
s = sorted(l, key=lambda x: x[0]+x[1])
previous = None
while s:
    i = s.pop()
    if i == previous:
        dups.append(i)
    else:
        res.append(i)
    previous = i

print res
print dups

答案 3 :(得分:0)

假设您只是想摆脱重复并且不关心订单,您可以将列表转换为字符串,将它们放入集合中,然后将它们转回列表列表。

foostrings = [x[0] + x[1] for x in listoflists]
listoflists = [[x[0], x[1:]] for x in set(foostrings)]

如果您要处理大量表格数据,另一个选择是使用pandas。

import pandas as pd
df = pd.DataFrame(listoflists)
deduped_df = df.drop_duplicates()