我遇到浮点值和dicts队列的问题。 我真的不知道发生了什么事。让我说清楚:
这是一个名为cqueue.py的文件:
from collections import deque
def DestroyQueue(q):
while LenQueue(q) >0:
q.popleft()
def GetQueue(q):
item=q.popleft()
AddQueue(q,item)
return item
def AddQueue(q,tdict={}):
q.append(tdict)
def LenQueue(q):
return len(q)
rcv_queue= deque()
can_queue= deque()
经过一些处理数据后,我的rcv_queue充满了大量的dicts。每个字典都有很多值(约30对或更多)。
现在,在一个名为" match.py"的新文件中,我有一个这样的例程:
qlen=LenQueue(rcv_queue)
while qlen>0:
pdict = {}
pdict = GetQueue(rcv_queue)
#THINGS
if something
AddQueue(can_queue,pdict)
qlen-=1
DestroyQueue(rcv_queue)
DbSimCases()
这"#THINGS"是关于处理每个字典和每对数据,新的字典(pdict)存储在can_queue上,它具有较小的大小(大约5个dict,超过50对)。 调用DestroyQueue来弹出所有dict并销毁rcv_queue,它不再使用了。 因此调用DbSimCases()来捕获can_queue(来自cqueue.py)并存储在mysql数据库中。 问题是: 在match.py上,dict float值一切正常,但是当从DbSimCases(第三个名为base.py的文件)调用can_queue时,浮点值会发生变化。 为了发现这个问题,我使用了这样的打印:
---在match.py上
qlen=LenQueue(rcv_queue)
while qlen>0:
pdict = {}
pdict = GetQueue(rcv_queue)
#THINGS
if something
AddQueue(can_queue,pdict)
o=GetQueue(can_queue)
print "pdict->args_score: " + str(p_args_score)
print "queue->args_score: " + str(o['p_args_score'])
qlen-=1
DestroyQueue(rcv_queue)
DbSimCases()
------ /结束
---在base.py上
def DbSimCases()
clen=LenQueue(can_queue)
while clen > 0:
pdict2={}
pdict2=GetQueue(can_queue)
print "pdict2->args_score: " + str(pdict2['p_args_score'])
所以结果应该是相同的浮动3次。但我得到了这个:
pdict->args_score: 1.8
queue->args_score: 1.8
pdict2->args_score: 0.0
这里是整个pdict和pdict2(逐行排序和匹配,以查看如上所述的许多问题):http://pastebin.com/ZffTMGxq
有人可以帮助我吗?我有什么问题吗? 谢谢,每一个帮助都将非常感激。
答案 0 :(得分:0)
我修好了。
我在match.py上创建了第三个dict:
qlen=LenQueue(rcv_queue)
while qlen>0:
pdict = {}
pdict = GetQueue(rcv_queue)
auxdict={}
#THINGS
if something
auxdict['key']=pdict['key']
AddQueue(can_queue, auxdict)
qlen-=1
DestroyQueue(rcv_queue)
DbSimCases()
它充当辅助词典,只有几个选定的词组。 Pdict有许多我不想要的东西,使用相同的dict传递给新的,是一个错误的决定和实践。