相关疑难解决方法(0)

如何实现Python的内置词典

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

python dictionary data-structures

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

为什么早退比其他人慢?

这是我几天前给出的回答的后续问题.编辑:似乎该问题的OP已经使用了我发给他的代码来问同样的问题,但我没有意识到它.道歉.提供的答案虽然不同!

我基本上观察到:

>>> def without_else(param=False):
...     if param:
...         return 1
...     return 0
>>> def with_else(param=False):
...     if param:
...         return 1
...     else:
...         return 0
>>> from timeit import Timer as T
>>> T(lambda : without_else()).repeat()
[0.3011460304260254, 0.2866089344024658, 0.2871549129486084]
>>> T(lambda : with_else()).repeat()
[0.27536892890930176, 0.2693932056427002, 0.27011704444885254]
>>> T(lambda : without_else(True)).repeat()
[0.3383951187133789, 0.32756996154785156, 0.3279120922088623]
>>> T(lambda : with_else(True)).repeat()
[0.3305950164794922, 0.32186388969421387, 0.3209099769592285]
Run Code Online (Sandbox Code Playgroud)

......或换句话说:else无论if条件是否被触发,使条款更快.

我假设它与两者生成的不同字节码有关,但有人能够详细确认/解释吗?

编辑:似乎不是每个人都能重现我的时间,所以我认为在我的系统上提供一些信息可能是有用的.我正在安装默认的python运行Ubuntu 11.10 64位.python …

python optimization python-2.7

174
推荐指数
1
解决办法
1万
查看次数

将具有相同散列的两个键放入dict中

>>> one_decimal = Decimal('1')
>>> one_complex = complex(1,0)
>>> d = {one_decimal: '1D', one_complex: '1C'}
>>> len(d)
2
>>> map(hash, d)
[1, 1]
Run Code Online (Sandbox Code Playgroud)

上面,我创建了一个带有哈希冲突的dict,并占用了两个插槽.

>>> d[1]
'1D'
>>> d[1+0j]
'1C'
Run Code Online (Sandbox Code Playgroud)

如何处理整数的getitem 1?索引如何设法解决复杂文字索引的正确值?

Python 2.7.12/Linux.

python dictionary python-2.x

13
推荐指数
1
解决办法
447
查看次数

依赖Python哈希函数时有什么冲突风险?

在我的程序中,我需要存储与许多(我们谈论数十万、数百万)游戏板状态相关的数据。为此,我使用字典。

class BoardState(object):
    def __init__(self, ...):
        # ...
        self.board = [ [ None ] * self.cols for _ in xrange(self.rows) ]

    def __hash__(self):
        board_tuple = tuple([ tuple(row) for row in self.board ])
        return hash(board_tuple)

    # ...
Run Code Online (Sandbox Code Playgroud)

self.board在我的主要用例中,是一个 2D 列表,有 6 行和 7 列。

一开始我dictBoardState对象索引了。但由于除了将来的查找之外,我不会将BoardState存储的对象dict用于其他目的,因此我注意到我可以通过索引来节省内存hash(board_state)(此版本使用的内存减少了 4 倍)。

BoardState两个不同的对象(内部有不同的boards)在 ing 后产生相同值的可能性有多大hash

为了澄清一点,这就是我存储和检索值的方式dict

board_state = BoardState(...)
my_values[hash(board_state)] = { ... }
...
other_val_with_board_state = source_function() …
Run Code Online (Sandbox Code Playgroud)

python hash python-2.7

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

Python dict如何在碰撞发生时存储关键值?

Python如何存储dict键,在哈希表中发生冲突时的值?什么是用于获取哈希值的哈希算法?

python dictionary hashtable

4
推荐指数
2
解决办法
4248
查看次数

Python字典(内置哈希表)如何实现?

我想知道python dict(字典/哈希表)是如何实现的。特别是如果我写类似

my_dict = {"key": {"key: {"key": "value"}}}
Run Code Online (Sandbox Code Playgroud)

python解释器可能做什么?我想知道它的内部运作。

是否将每个字典都视为一个对象(通常是)?如果是这样,那么跨不同词典的相同键的哈希值是否相同?例如

dict1 = {"key": "value", "k": "v"}
dict2 = {"key": [1, 2.], "k": "value"}
Run Code Online (Sandbox Code Playgroud)

在这两个不同的字典中对键的查找有何不同?另外,它如何确定铲斗的尺寸?还是类似于列表大小的处理?希望你能回答我的问题。谢谢!

编辑 -不,我不是问哈希表如何工作。我知道那部分。

python dictionary hashtable hashmap

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

Python 对象作为 Dict Key 使用 __hash__ 进行访问

参加这个超级简单的课程:

class Foo():
    def __init__(self, iden):
        self.iden = iden
    def __hash__(self):
        return hash(self.iden)
    def __repr__(self):
        return str(self.iden)
Run Code Online (Sandbox Code Playgroud)

目标是创建类的实例以用作字典键。如果__repr__省略,则键是标准对象地址。可__repr__打印的表示可能是:

f = Foo(1)
g = Foo(2)
d = {f:'a', g:'b'}
print(d)
>>> {1:'a', 2:'b'}
Run Code Online (Sandbox Code Playgroud)

__repr__然而,当尝试通过键访问字典时,如何利用(或__str__就此而言)表示形式作为键似乎并不是立即显而易见的。

print(d[1]) 
>>> KeyError
Run Code Online (Sandbox Code Playgroud)

python dictionary python-3.x

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