我一直在寻找其他问题,但我没有找到任何帮助。 我得到了这段代码:
def pairs(self, listOrString):
if listOrString:
return filter(re.compile(self.pairwise(self.text)).match, frozenset(self.text))
else:
return ' '.join(filter(re.compile(self.pairwise(self.text)).match, frozenset(self.text)))
def pairs_freqency(self):
return Counter(self.pairs(True))
def sum_pairs(self):
return len(self.ngrams(self.letters(list),2))
def pair_probability(self):
{pair : freqency / self.sum_pairs() for (pair, freqency) in self.pairs_freqency().iteritems()}
def pairwise(self, sequence):
x,y = tee(sequence)
next(y)
return zip(x,y)
但是当我尝试打印时:
print pairs_freqency()
我收到此错误:
**更新
Traceback (most recent call last):
File "...", line 281, in <module>
print pairs(string, text)
File "...", line 46, in get_pairs
return filter(re.compile(self.pairwise(self.text)).match, frozenset(self.text))
File "...", line 190, in compile
return _compile(pattern, flags)
File "...", line 232, in _compile
p = _cache.get(cachekey)
TypeError: unhashable type: 'list'
有人可以尽快帮助我 感谢。
答案 0 :(得分:3)
TypeError: unhashable type: 'list' Error
(或list
或dict
的成员)中使用set
作为关键字时,会发生 frozenset
。解决此问题的标准方法是将list
转换为tuple
,例如:
In [4]: my_dict = {[2,3,4] : 'a'}
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-4-cda6d34218c4> in <module>()
----> 1 my_dict = {[2,3,4] : 'a'}
TypeError: unhashable type: 'list'
In [5]: my_dict = {tuple([2,3,4]) : 'a'}
In [6]: my_dict
Out[6]: {(2, 3, 4): 'a'}
答案 1 :(得分:2)
Counter
需要一个可迭代的参数,每个项的可哈希(==可以是dict
的关键字)。您案例中的项目是列表,这些项目不可清除(因为它们是可变的)。修复:改为使用元组,特别是在pairs
方法中 - 而不是
return filter(re.compile(self.pairwise(self.text)).match, list(self.text))
使用
return filter(re.compile(self.pairwise(self.text)).match, tuple(self.text))
答案 2 :(得分:0)
尝试将任何列表lst
投射到frozenset(lst)
。