繁体   English   中英

如何在python中将多个值存储在一起?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM