初识dict

目录

初识dict

新增数据

修改数据

pop()

遍历dict

根据value找key

判断key是否存在

dict和list的区别

dict的key必须是不可变对象

list, tuple, dictionary, set的底层细节

参考文档


  • 初识dict

dict全称dictionary(字典),使用键-值(key-value)存储,具有极快的查找速度。

>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
>>> d['Michael']
95

注意:python3.7以及之后的dict是有序的,因为改了底层实现结构,查找效率由O(1)变为O(2),详情见https://segmentfault.com/a/1190000019852204

  • 新增数据

>>> d['Adam'] = 67
>>> d['Adam']
67
  • 修改数据

>>> d['Jack'] = 90
>>> d['Jack']
90
>>> d['Jack'] = 88
>>> d['Jack']
88
  • pop()

     用pop(key)方法,对应的value也会从dict中删除:

>>> d.pop('Bob')
75
>>> d
{'Michael': 95, 'Tracy': 85}

 

  • 遍历dict

方法一:直接for循环取出的是key
>>> l={'a':1,'b':2,'c':3}
>>> for i in l:
...     print(i,l[i])
...
a 1
b 2
c 3
方法二:用dict.itmes()
>>> l={'a':1,'b':2,'c':3}
>>> for k,v in l.items():
...     print(k,v)
...
a 1
b 2
c 3

遍历keys:
>>> for k in d.keys():
...     print(k)

遍历values:
>>> for v in d.values():
...     print(v)
  • 根据value找key

把key和value分别list化,根据value的索引找key的索引

a_dict = {1:'0001', 2: '002'}
print(list(a_dict.keys())) # key 列表
print([list(a_dict.values()).index('002')]) # 对应的索引值
print(list(a_dict.keys())[list(a_dict.values()).index('002')])


#[ 1, 2]
# [1]
# 2
  • 判断key是否存在

方法1,通过in判断key是否存在:
>>> 'Thomas' in d
False
方法2,通过dict提供的get()方法,如果key不存在,可以返回None,或者自己指定的value:

>>> d.get('Thomas')
注意:返回None的时候Python的交互环境不显示结果。

下面这个方式有问题,搜一下用法
>>> d.get('Thomas', -1)
-1

 

  • dict和list的区别

dict有以下几个特点:

  1. 查找和插入的速度极快,不会随着key的增加而变慢;
  2. 需要占用大量的内存,内存浪费多。

而list相反:

  1. 查找和插入的时间随着元素的增加而增加;
  2. 占用空间小,浪费内存很少。

所以,dict是用空间来换取时间的一种方法。

  • dict的key必须是不可变对象

在Python中,字符串、整数等都是不可变的,因此,可以放心地作为key。而list是可变的,就不能作为key:

>>> key = [1, 2, 3]
>>> d[key] = 'a list'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
  • list, tuple, dictionary, set的底层细节

list:对其它对象的引用组成的连续数组(可以理解为c中的数组) 查找的效率为O(n)

dict:
    python3.7之前:散列表(hash table),查找的效率为O(1)
    python3.7以及之后:由Indices(索引,数组实现) 和 Entries(实体,PyDictObject类型) 两种结构组成。查找效率为O(2)

set:没有value的dict,查找的效率为O(1)
#参考文档:https://blog.csdn.net/siyue0211/article/details/80560783
  • 参考文档

dict的使用:
https://www.cnblogs.com/hukey/p/9621631.html
https://www.cnblogs.com/jiangzuofenghua/p/11379509.html

defaultdict用法:
http://kodango.com/understand-defaultdict-in-python

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值