我编写了一个 python 代码来计算查询的数量,以及日志中的广告数量。
例如(google, 16, 35)
wheregoogle
表示查询,16
表示查询号,35
表示广告号。
我想定义两个字典,一个字典是 store query->query_number
,另一个是query->advertisement
,然后加入这两个字典。
但是好像太复杂了,有没有可能存储query, query_num, advertisement_num
在一个字典里?
if match[0].strip():
if not dict.has_key(match[0]):
dict[match[0]] = 1
else:
dict[match[0]] +=1
此代码用于计算 queryNum,但我仍然必须存储 adver_count。我该怎么办?
我已经使用类来存储 query_num 和 adver_num。这是我的代码。如何根据 adver_num 进行降序排序?谁能帮助我?谢谢
import re
dict={}
class log:
def __init__(self,query_num, adver_num):
self.query_num = query_num
self.adver_num = adver_num
f = open('result.txt','w')
def sort_by_value(d):
return sorted(d.items(), lambda x, y: cmp(x[1], y[1]), reverse=True)
for line in open("test.log"):
count_result = 0
query_num = 0
match=re.search('.*qry=(.*?)qid0.*rc=(.*?)discount',line).groups()
counts=match[1].split('|')
for count in counts:
count_result += int(count)
if match[0].strip():
if not dict.has_key(match[0]):
dict[match[0]] = log(1,count_result)
else:
query_num = dict[match[0]].query_num+1;
count_result = dict[match[0]].adver_num+count_result;
dict[match[0]] = log(query_num,count_result)
#f.write("%s\t%s\n"%(match[0],count_result))
sort_by_value(dict)
for i in dict.keys():
f.write("%s\t%s\t%s\n"%(i,dict[i].query_num,dict[i].adver_num))