python中的字典

1. 键必须是可散列的。(dict的散列表中,每个键值对都占用一个表元,每个表元都有两个部分,一个是对键的引用,一个是对值得引用)

    一个可散列的对象必须满足以下要求。(这也就是可变对象是不能作为字典中的键的原因的)

    1). 支持hash函数,并且通过__hash__所得到的散列值是不变的

    2). 支持通过__eq__方法检测相等性

    3). 若a==b为真,则hash(a)==hash(b)为真

2. 字典在内存中的开销是巨大的(字典使用了散列表,而散列表又必须是稀疏的。Python会设法保证,大概三分之一的表元是空的,所以在快要到达这个阈值的时候,原有的散列表会复制到一个更大的空间里去)

3. 键查询很快(字典的实现是典型的以空间换时间,字典类型有着巨大的内存开销,但是它们提供了无视数据量大小的快速访问)

4. 键的次序取决于添加顺序(这是由于有的键发生冲突,那么发生冲突的键的顺序,就取决于添加顺序)

5. 往字典里添加新键可能会改变已有键的顺序(这个就是为什么不能遍历字典的时候,对字典进行添加或删除)

6. 字典的items(),keys(),values(),是字典的视图。可以理解为,当字典发生更改的时候,这三个方法在更改之前调用的时候返回的对象也会发生相应的更改。

d=dict([(1,2),(2,3)])
i=d.items()
print(i)#dict_items([(1, 2), (2, 3)])
d[3]=4
print(i)#dict_items([(1, 2), (2, 3), (3, 4)])

常用的哈希冲突解决的办法:

开放寻址法

分离链表法


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值