相关疑难解决方法(0)

如何实现Python的内置词典

有谁知道如何实现python的内置字典类型?我的理解是它是某种哈希表,但我无法找到任何确定的答案.

python dictionary data-structures

263
推荐指数
3
解决办法
7万
查看次数

Python dict如何具有相同哈希的多个键?

我试图了解引擎盖下的python哈希函数.我创建了一个自定义类,其中所有实例都返回相同的哈希值.

class C(object):
    def __hash__(self):
        return 42
Run Code Online (Sandbox Code Playgroud)

我只是假设上面的类中只有一个实例可以随时出现在一个集合中,但实际上一个集合可以有多个具有相同散列的元素.

c, d = C(), C()
x = {c: 'c', d: 'd'}
print x
# {<__main__.C object at 0x83e98cc>:'c', <__main__.C object at 0x83e98ec>:'d'}
# note that the dict has 2 elements
Run Code Online (Sandbox Code Playgroud)

我进行了一些实验,发现如果我重写__eq__方法使得类的所有实例比较相等,那么该集只允许一个实例.

class D(C):
    def __eq__(self, other):
        return hash(self) == hash(other)

p, q = D(), D()
y = {p:'p', q:'q'}
print y
# {<__main__.D object at 0x8817acc>]: 'q'}
# note that the dict has only 1 element
Run Code Online (Sandbox Code Playgroud)

所以我很想知道dict有多个具有相同哈希的元素.谢谢!

注意:编辑问题以给出dict(而不是set)的例子,因为答案中的所有讨论都是关于dicts的.但这同样适用于集合; 集合也可以有多个具有相同散列值的元素.

python hash dictionary equality set

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

在字典中覆盖Python的哈希函数

我正在尝试为某些对象创建自定义哈希函数,我将要将其编入字典.散列函数是唯一的(不是标准的Python函数).这对我来说非常重要:使用独特的功能.每个键的值都是一个列表.

假设我覆盖__hash__并最终为对象提供正确的哈希值.将:

dict = {}
dict[number_here] = value
Run Code Online (Sandbox Code Playgroud)

将值散列到位置编号中number_here,还是仍然位于Python的哈希表为该数字计算的位置?

打印dict仅显示项目,而不是它们的位置.但是,当我这样做时hash(4),结果是4.所以我假设这意味着整数被散列到它们各自的位置?

如果我错了,有人可以验证我的发现或向我解释一下吗?

python hash dictionary hashtable

6
推荐指数
1
解决办法
7443
查看次数

标签 统计

dictionary ×3

python ×3

hash ×2

data-structures ×1

equality ×1

hashtable ×1

set ×1