python的dict(字典)

概述

python中的 dict — 字典,是一种很常见的数据结构,在很多开发语言中都有,只是叫法不同。

存储结构是key:value方式,一个key对应一个value

如何理解key和value

见下面的两张身份证图片,观察区别,哪个身份证更加易于理解

“姓名”、“性别”就是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

>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:
    >del d['name']
    
    注意:如果key不存在会抛异常
  • 方式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行取消注释,写出结果


原文出处:/show_1EF1RCmHfMbu.html