python 字典有序无序及查找效率,hash表

刚学python的时候认为字典是无序,通过多次插入,如di = {}, 多次di['testkey']='testvalue' 这样测试来证明无序的。

后来接触到了字典查找效率这个东西,查了一下,原来字典在python内部是通过哈希表的顺序来排的,做了一些测试,比如di = {1:1,3:3,2:2,4:4,5:5} ,无论怎么改变键值对的顺序,print di 总是会{1: 1, 2: 2, 3: 3, 4: 4, 5: 5}。所以看起来当插入di['key']='value'时,这组键值对有时并没有跑到最后的位置。

所以亦可以说:字典是有序的。

当然,这里的有序和无序的概念要看你从哪方便理解了,从数据结构上看它是已哈希表的顺序排列;只不过从展示层上看它的确不是从左到右按赋值添加的。

另外从python字典中取值,无论长度多少,其时间/空间复杂度都是O(1)。

leetcode 列表两个值相加等于某个数,返回两个值对应的index的题目,如果想利用单层循环来实现,正好利用到hash表。

https://leetcode.com/problems/two-sum/

实现代码:

class Solution(object):

def twoSum(self, nums, target):

"""

:type nums: List[int]

:type target: int

:rtype: List[int]

"""

dict={}

for i,x in enumerate(nums):

if dict.get(target-x,None) == None:

dict[nums[i]] = i

else:

return(dict[target-x],i)

要比用双层循环速度快一个量级