相关疑难解决方法(0)

你在Python中使用hashable是什么意思?

我试过搜索互联网,但找不到哈希的含义.

当他们说对象是什么hashablehashable objects它是什么意思?

python

163
推荐指数
6
解决办法
11万
查看次数

Python hashable dicts

作为一个练习,主要是为了我自己的娱乐,我正在实现一个回溯包装解析器.对此的灵感是我想更好地了解hygenic宏如何在类似algol的语言中工作(与你通常在其中找到的语法免费lisp方言相对应).因此,通过输入的不同传递可能会看到不同的语法,因此缓存的解析结果无效,除非我还存储语法的当前版本以及缓存的解析结果.(编辑:使用键值集合的结果是它们应该是不可变的,但我不打算公开接口以允许它们被更改,因此可变或不可变集合都可以)

问题是python dicts不能作为其他dicts的键.即使使用元组(正如我将要做的那样)也无济于事.

>>> cache = {}
>>> rule = {"foo":"bar"}
>>> cache[(rule, "baz")] = "quux"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'dict'
>>> 
Run Code Online (Sandbox Code Playgroud)

我想它必须一直是元组.现在python标准库提供了我所需要的,collections.namedtuple具有非常不同的语法,但可以用作键.继续上述会议:

>>> from collections import namedtuple
>>> Rule = namedtuple("Rule",rule.keys())
>>> cache[(Rule(**rule), "baz")] = "quux"
>>> cache
{(Rule(foo='bar'), 'baz'): 'quux'}
Run Code Online (Sandbox Code Playgroud)

好.但是我必须为我想要使用的规则中的每个可能的键组合创建一个类,这不是那么糟糕,因为每个解析规则确切地知道它使用了什么参数,因此可以同时定义该类作为解析规则的函数.

编辑:namedtuples 的另一个问题是它们是严格定位的.两个看起来应该不同的元组实际上可以是相同的:

>>> you = namedtuple("foo",["bar","baz"])
>>> me = namedtuple("foo",["bar","quux"])
>>> you(bar=1,baz=2) == me(bar=1,quux=2)
True
>>> bob = namedtuple("foo",["baz","bar"]) …
Run Code Online (Sandbox Code Playgroud)

python

79
推荐指数
7
解决办法
5万
查看次数

TypeError:不可用类型:使用内置set函数时的'list'

我有一个包含多个列表作为其元素的列表

eg: [[1,2,3,4],[4,5,6,7]]
Run Code Online (Sandbox Code Playgroud)

如果我使用内置的set函数从这个列表中删除重复项,我会收到错误

TypeError: unhashable type: 'list'
Run Code Online (Sandbox Code Playgroud)

我正在使用的代码是

TopP = sorted(set(TopP),reverse=True)
Run Code Online (Sandbox Code Playgroud)

其中TopP是一个列表,就像在例如Above

这个set()的用法是错误的吗?有没有其他方法可以对上面的列表进行排序?

python list duplicates

35
推荐指数
2
解决办法
7万
查看次数

设置为字典键

我在 Python 中运行了以下代码行,但收到​​了标题为“TypeError: unhashable type: 'set' ”的错误。我想把钥匙变成一个列表。我该如何解决这个错误?

dictionary = {
    'a' : [[1,2,3],[4,5,6],[7,8,9]],
    'b' : 2,
    {100} : 3
}
print(dictionary['a'][1][2])
Run Code Online (Sandbox Code Playgroud)

python dictionary

2
推荐指数
1
解决办法
2183
查看次数

标签 统计

python ×4

dictionary ×1

duplicates ×1

list ×1