[英]How to store multiple values together in python?
我已经编写了一个python代码,以计算查询数和日志中的广告数。
例如(google, 16, 35)
,其中google
表示查询, 16
表示查询号, 35
表示广告号。
我考虑过定义两个字典,一个字典是store query->query_number
,另一个字典是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))
您只能使用一个字典,将query
作为键,将一个元组(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)
您可以自己创建类:
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
是的你可以。 使用query
作为键,您可以简单地使用元组作为dict的值:
d = {"google": (16, 35)}
您甚至可以将字典用作值:
d = {"google": {"query number": 16, "advertisement number": 35}}
您可以使用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))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.