Skip to main content
 首页 » 编程设计

带有 list 关键字的 Python 字典

2025年05月04日13sky-heaven

我正在编写 N 阶马尔可夫链。

它是这样的:

class Chain: 
 def __init__(self, order): 
  self.order = order 
  self.state_table = {} 
 def train(self, next_state, *prev_states): 
  if len(prev_states) != self.order: raise ValueError("prev_states does not match chain order") 
  if prev_states in self.state_table: 
   if next_state in self.state_table[prev_states]: 
    self.state_table[prev_states][next_state] += 1 
   else: 
    self.state_table[prev_states][next_state] = 0 
  else: 
   self.state_table[prev_states] = {next_state: 0} 

不幸的是,列表和元组是不可散列的,我不能将它们用作字典中的关键字... 我希望我已经很好地解释了我的问题,以便您理解我试图实现的目标。

有什么好的想法可以为字典关键字使用多个值吗?

后续问题:

我不知道元组是可哈希的。 但是哈希的熵似乎很低。元组是否可能存在哈希冲突?!

请您参考如下方法:

当元组的内容是可散列的时,是可散列的。

>>> a = {} 
>>> a[(1,2)] = 'foo' 
>>> a[(1,[])] 
Traceback (most recent call last): 
  File "<stdin>", line 1, in <module> 
TypeError: unhashable type: 'list' 

至于冲突,当我尝试一堆非常相似的元组时,我看到它们被映射得很远:

>>> hash((1,2)) 
3713081631934410656 
>>> hash((1,3)) 
3713081631933328131 
>>> hash((2,2)) 
3713082714462658231 
>>> abs(hash((1,2)) - hash((1,3))) 
1082525 
>>> abs(hash((1,2)) - hash((2,2))) 
1082528247575