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