我在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);
我已尝试过这里提出的几个解决方案
例如:
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.')
欢迎任何建议。
答案 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()