一个简单的问题,我知道在字典中查找条目时,有一种快速有效的方法:
(假设使用collections.OrderedDict()
以某种方式对字典进行排序)
从字典的中间开始,找出所需的键是否关闭到一半或另一半,例如在按字母顺序排序的字典中测试名称的位置时(或者在极少数情况下死亡)。然后检查下一半,并继续此模式,直到找到该项(意味着使用1000000键的字典,您可以在此算法的20次迭代中有效地找到任何键)。
所以我想知道,如果我使用in
语句(即if a in somedict:
),是否会使用相同的方法检查所需的密钥?它使用更快/更慢的算法吗?
答案 0 :(得分:1)
不。 Python的词典基本上使用hash table(它实际上使用修改的哈希表来提高速度)(我不打算解释哈希表;链接的维基百科文章描述得很好)这是一个允许〜的整洁结构〜 O(1)(非常快)访问。 in
查找对象(与dict [object]相同的东西),除了它不返回对象,这是最佳的方法。
code for in
for dictionaries包含此行(dk_lookup()
返回哈希表条目(如果存在),否则为NULL(相当于C中的None,通常表示错误)):
ep = (mp->ma_keys->dk_lookup)(mp, key, hash, &value_addr);