クエリの数とログからの広告の数をカウントするための Python コードを作成しました。
たとえば、(google, 16, 35)
wheregoogle
はクエリを16
意味し、クエリ番号を35
意味し、広告番号を意味します。
私は 2 つの辞書を定義することを考えまし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))