0

我编写了一个 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))
4

4 回答 4

1

您只能使用一个 dictquery作为键,使用一个元组(query_num, advertisement_num)作为值。

代码示例:

计算queryNum时,

if match[0].strip():
    if not dict.has_key(match[0]):
        dict[match[0]] = (1,0)
    else:
        qnum, adnum = dict[match[0]]
        dict[match[0]] = (qnum + 1, adnum)
于 2013-08-20T08:34:16.473 回答
0

您可以为自己创建类:

class YourClass:
    def __init__(self, query, query_num, adver_num):
        self.query = query
        self.query_num = query_num
        self.adver_num = adver_num

谢谢你可以这样处理:

your_dictionary['google'] = YourClass('google', 16, 35)

并访问以下值:

print your_dictionary['google'].query, your_dictionary['google'].query_num, your_dictionary['google'].adver_num
于 2013-08-20T08:36:31.940 回答
0

是的你可以。使用query作为键,您可以简单地使用元组作为 dict 的值:

d = {"google": (16, 35)}

您甚至可以使用字典作为值:

d = {"google": {"query number": 16, "advertisement number": 35}}
于 2013-08-20T08:36:45.777 回答
-1

您可以使用 itertools 链将查询集保存到一个相同的列表中,如下所示;

#Import itertools
from itertools import chain
# use itertools chain to store your querysets into a list/variable like "store" 
store = list(chain(query_num, advertisement_num))
于 2013-08-20T08:38:33.507 回答