一、列表去重(转换为集合)
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数据去重