9
Python哈希值字典
作为一种练习,并且主要是出于我的娱乐,我正在实现回溯packrat解析器。这样做的灵感是,我想更好地了解Hygenic宏如何在类似algol的语言中工作(与通常在其中找到的无语法lisp方言相对应)。因此,通过输入的不同传递可能会看到不同的语法,因此缓存的解析结果是无效的,除非我还将语法的当前版本与缓存的解析结果一起存储。(编辑:使用键值集合的结果是它们应该是不可变的,但我无意公开接口以允许对其进行更改,因此可变或不可变的集合都可以) 问题是python字典不能作为其他字典的键出现。即使使用元组(无论如何我也会这样做)也无济于事。 >>> cache = {} >>> rule = {"foo":"bar"} >>> cache[(rule, "baz")] = "quux" Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unhashable type: 'dict' >>> 我想它必须一直是元组。现在,python标准库提供了大约所需的内容,collections.namedtuple语法非常不同,但是可以用作键。从以上会议继续: >>> from collections import namedtuple >>> Rule = namedtuple("Rule",rule.keys()) >>> cache[(Rule(**rule), "baz")] = "quux" >>> cache {(Rule(foo='bar'), 'baz'): …
91
python