一、列表去重(转换为集合)
python 列表本身没有去重的功能,但是我们建议借助别的类型来完成去重的功能,比如集合。
a = [1,2,3,3,2,4]
b = set()
a = list(set(a))
print a
思路先用set先转换成集合,集合里面的值是唯一的。所以这里保证把重复的内容给去掉。然后再转换成我们想要的列表。想要了解更多可以列表相关的功能,可以看下python 列表操作
二、按照数据的一部分去重,但结果要显示全部信息
即今天在为师兄写去重URL的文件,师兄要求分别按照domain、domain+path去重,但结果还是完整的url。因此,无法使用上面通过列表转换为集合的方法来去重。我是用的是字典,主键即为domain或domain+path,值即为完整url。
代码如下:
#!/usr/bin/env python def fun1(filename,resultname): fp = open(filename) fp1 = open(resultname,'w+') result = {} for line in fp: start= line.find('?') domain = line[0:start] if domain in result: continue result[domain]=line for each_key in result.keys(): fp1.writelines(result[each_key]) fp.close() fp1.close() def fun2(filename,resultname): fp = open(filename) fp1 = open(resultname,'w+') result = {} for line in fp: urls= line.split('/') domain = urls[2] if domain in result: continue result[domain]=line for each_key in result.keys(): fp1.writelines(result[each_key]) fp.close() fp1.close() if __name__=="__main__": fun1(r'C:\Users\jinglingshu\Desktop\list.txt',r'C:\Users\jinglingshu\Desktop\result1.txt') fun2(r'C:\Users\jinglingshu\Desktop\list.txt',r'C:\Users\jinglingshu\Desktop\result2.txt')
其实,还可以更简化,不用判断键名是否存在,直接赋值即可(因为没有要求重复的返回第一个URL)
转载请注明:jinglingshu的博客 » python数据去重