Я кодирую цепочку маркеров N'-го порядка.Python словарь с ключевым словом
Это звучит примерно так:
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}
Unfortunally, список и кортежи unhashable, и я не могу использовать их в качестве ключевых слов в dicts ... Я надеюсь, объяснил свою проблему достаточно хорошо для вас, чтобы понять, чего я пытаюсь достичь.
Любые хорошие идеи, как я могу использовать несколько значений для словарного словаря?
Followup вопрос:
Я не знал, что кортежи hashable. Но энтропия хешей кажется низкой. Возможны ли хэш-коллизии для кортежей?
* список и кортежи расстегиваются * - кортежи хешируются. (если их содержимое хешируется, как правильно отметили @larsmans) – eumiro
Один-космос-отступ? Это очень уродливо читать. Вы должны следовать PEP-8 и использовать отступы с 4-мя пробелами. – ThiefMaster
eumiro, спасибо! добавлен следующий вопрос относительно хеш-коллизий –