概述
python中的 dict — 字典,是一种很常见的数据结构,在很多开发语言中都有,只是叫法不同。
存储结构是key:value方式,一个key对应一个value
如何理解key和value
见下面的两张身份证图片,观察区别,哪个身份证更加易于理解
“姓名”、“性别”就是key,与之对应的具体内容就是value
试想如果身份证上没有 “姓名”、“性别”、“民族”、“出生”等等这些 key,而只是有 奥巴马、男、肯尼亚卢欧族,很难理解其代表的含义,哪一个是名字,哪一个是性别、哪一个是民族
特性:
- key不允许重复,如果重复,value会被覆盖
- key必须是“不可变”数据类型(不能是list、dict、set类型)
- 在python3.5(含)之前,是无序集合;在python3.6(含)之后,是有序的,而且效率更高
- 依靠哈希表(hash table)进行实现的,所以查找和插入的速度极快,不会随着key的数量增加而变慢;
- 在python3.5(含)之前,占用大量内存;在python3.6(含)之后,占用内存更小
注意:
一个对象能不能作为字典的key,就取决于有没有__hash__方法
参见:https://blog.csdn.net/lnotime/article/details/81192207
更详细文章参见链接:
http://www.runoob.com/python3/python3-dictionary.html
声明
创建空的dict
>d={}
>type(d)
{key:value}方式
>d={"name":"汤姆克鲁斯","age":50,"片酬":10000000.00}
>d
key可以是字符串、数字,但是key必须是不可变的,所以不能是list
函数声明
>d=dict(name='IphoneX',price=7000.00)
>d
声明时name不能是字符串形式,但将key转换为字符串
添加key、value
>d["memory"]='3G'
修改value
>d["name"]='iphone4'
访问
方式一
>d["name"]
注意:如果key不存在,那么会抛异常,如下:
>d["asasdf"]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'asasdf'
方式二
>d.get('name')
注意:如果key不存在,不会抛异常,返回None(空),如下:
>d.get('asdlfj')
什么都不显示
使用type()函数查看:
>type(d.get('asdlfj'))
<class 'NoneType'>
显示NoneType类型
方式三
如果key不存在时,返回固定值,代码如下:
>d.get('abcd','key不存在')
'key不存在'
判断key是否在dict中
> 'name' in d
列出所有key
>d.keys()
dict_keys(['price', 'name'])
查看返回值的类型:
>type(d.keys())
<class 'dict_keys'>
for语句遍历所有key:
>for key in d.keys():
print(key)
将列出的keys转换成list:
>list(d.keys())
列出所有value
>d.values()
遍历
for key,value in d.items():
print("%s=%s"%(key,value))
删除key和value
删除key后,value也删除了
- 方式1:
注意:如果key不存在会抛异常>del d['name'] 方式2:
>d.pop('name') 'iphone4'会返回value值
注意:如果 key不存 在会 抛异常方式3:
如果 key不存在,返回 固定值,并且 不抛异常>d.pop('abc',None)
清空
>d.clear()
{}
合并两个dict
>d.update(d2)
思考题
通过程序将下列数据转换成dict
l=[('name','排骨米饭'),('price',14.8),('address','星城国际1700')]
转换后
d={'name':'排骨米饭','price':14.8,'address':'星城国际1700'}
读下面的程序
sessions={}
sessionid='123'
sessions[sessionid]={}
session=sessions[sessionid] # A行
# session={} # B行
session['userid']='123456789'
'''
{'123':{}}
{'123':{'userid':'123456789'}}
'''
print(sessions)
并写出结果
如果把A行注释,B行取消注释,写出结果

