Python:在使用变量作为键搜索计数器时无法返回正确的计数

时间:2018-06-13 18:59:55

标签: python dictionary counter

我正在使用正则表达式来查找与计数器的键对应的字符串,并且我试图使用包含其中一个字符串的变量来访问此计数器。它与键相同,但是当我直接使用变量而不是键时,计数返回整数等于零。例如,变量ngram_b包含字符串('long,'),它是我的计数器中的键。使用下面的代码,proba_b将等于零,我得到除零错误,但proba_b = probas.ngrams[order][('long,')]返回正确答案0.006.

for ngram, count in joint_probas.items():
    ngram_b = re.search(r'(?<=\), ).*\)(?=\))',str(ngram),re.DOTALL)
    ngram_b= ngram_b.group(0)
    order = int(ngram_b.count('\'')/2)
    proba_b = probas.ngrams[order][ngram_b]
    if proba_b == 0 :
        print(ngram_b, order)
    proba_joint = joint_probas[ngram]
    condi_prob[ngram] = proba_joint / proba_b

这对我来说真的很奇怪,必须有一些我不了解字典是如何工作的东西,希望有人会看到我所缺少的东西。

编辑:Joint_probas是一个包含两个ngram的联合概率的计数器,密钥的格式(对于带有二元语法的一克):(('word1',), ('word2', 'word3'))Probas是一个包含所有ngrams概率的计数器,格式为bigram ('word2', 'word3')。我试图在joint_probas中的每个条目中查找第二项的单一概率来计算条件概率。

谢谢

1 个答案:

答案 0 :(得分:0)

你还没有给出probas的数据结构,所以我只能猜测它是一个成员,它是一个字典列表,其中的键是元组,如下所示:

>>> class Foo:
>>>     ngrams = [ { ('word2', 'word3') : 11 }, { ('word2', 'word3') : 12 }, { ('word2', 'word3') : 13 } ]
>>> probas = Foo()

定义tuple类型的键及其字符串版本:

>>> key = ('word2','word3')
>>> type(key)
<type 'tuple'>
>>> strKey = str(key)
>>> type(strKey)
<type 'str'>

然后:

>>> probas.ngrams[2][key]
13
>>> probas.ngrams[2][strKey]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: "('word2', 'word3')"

我怀疑这是你的问题,因为在正则表达式之后,ngram_b将是一个字符串,并且你正在使用它来查找一个元组的键。不过没有一个完整的例子就无法确定,顺便说一句,这会节省每个人的时间。