一、字典(Dictionary)
字典是另一种可变容器模型,且可存储任意类型对象。
值可以取任何数据类型,也可以嵌套多层,但键必须是不可变的,如字符串,数字或元组,这些键会转为hash值存储起来;键不可以是列表,布尔值,字典,因为这些不可以转为hash值存储起来。
字典是无序的,每次用print函数输出的结果顺序都不一定相同。
字典的每个键值 key=>value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中 ,格式如下所示:
info = {'k1' : 'v1' , 'k2' : 123 }
键 值 键 值
- 索引取值
info = { "k1": 18, 2: True, "k3": [ 11, [], (), 22, 33, { 'kk1': 'vv1', 'kk2': 'vv2', 'kk3': (11,22), } ], "k4": (11,22,33,44) } v = info['k1'] print(v) v = info[2] print(v) v = info['k3'][5]['kk3'][0] ##多层嵌套的取值 print(v)
输出:
18
True
11
- del删除
info = { "k1": 18, ##被删除部分 2: True, "k3": [ 11, [], (), 22, 33, { 'kk1': 'vv1', ##被删除部分 'kk2': 'vv2', 'kk3': (11,22), } ], "k4": (11,22,33,44) } 输出:{2: True, 'k3': [11, [], (), 22, 33, {'kk2': 'vv2', 'kk3': (11, 22)}], 'k4': (11, 22, 33, 44)}
- for循环
info = { "k1": 18, 2: True, "k3": [ 11, [], (), 22, 33, { 'kk1': 'vv1', 'kk2': 'vv2', 'kk3': (11,22), } ], "k4": (11,22,33,44) } for item in info: print(item) ##默认输出所有的key for item in info.keys(): print(item) ##输出所有的key for item in info.values(): print(item) ##输出所有的values for item in info.keys(): print(item,info[item]) ##输出所有的key,并使用索引同时输出key所对应的value for k,v in info.items(): print(k,v) ##同时取出key和value,分别赋值给k和v,然后输出
输出:
k1
2
k3
k4
k1
2
k3
k4
18
True
[11, [], (), 22, 33, {'kk1': 'vv1', 'kk2': 'vv2', 'kk3': (11, 22)}]
(11, 22, 33, 44)
k1 18
2 True
k3 [11, [], (), 22, 33, {'kk1': 'vv1', 'kk2': 'vv2', 'kk3': (11, 22)}]
k4 (11, 22, 33, 44)
k1 18
2 True
k3 [11, [], (), 22, 33, {'kk1': 'vv1', 'kk2': 'vv2', 'kk3': (11, 22)}]
k4 (11, 22, 33, 44)
二、python中字典的函数&方法
内置函数
内置方法
1.根据序列,创建字典,并指定统一的值
v = dict.fromkeys(["k1",123,"999"],123) #前边的列表是所有的key, 后边的123是值,将分别赋给三个key,即三个key的value都是123 print(v)
输出:
2.根据Key获取值,key不存在时,可以指定默认值(None)
dic = { "k1": 'v1', "k2": 'v2' } # v = dic['k11'] # print(v) ##使用索引,当key 'k11' 不存在时就会报错,所以该方法有弊端 #v = dic.get('k11') #print(v) ##使用get方法,当key不存在时会输出None #v = dic.get('k11',123) #print(v) ##get方法可以添加两个参数,当指定的key不存在时,get方法会将括号内的第二个参数赋给key,当key已经存在时,第二个参数将会失效
3.删除
- 删除(用一个参数接收)
dic = { "k1": 'v1', "k2": 'v2' } v = dic.pop('k1') ##将取出的k1的值赋给v print(dic,v) dic = { "k1": 'v1', "k2": 'v2' } v = dic.pop('k11',90) ##当指定的key(k11)存在时,指定的value(90)会失效,k11不存在时,v等于指定的value90 print(dic,v)
输出:
- 删除(用两个参数接收)
dic = { "k1": 'v1', "k2": 'v2' } k,v = dic.popitem() ##随机删除一对 print(dic,k,v)
输出:
4 .设置值
已存在,不设置,获取当前key对应的值
不存在,设置,获取当前key对应的值
dic = { "k1": 'v1', "k2": 'v2' } v = dic.setdefault('k1','123') ##当key存在时,后边指定的值会失效 print(dic,v)
v = dic.setdefault('k11','123') print(dic,v)
输出:
5.更新(update)
dic = { "k1": 'v1', "k2": 'v2' } dic.update({'k1': '111111','k3': 123}) ##已存在的更新,不存在的加上去 print(dic) dic.update(k1=123,k3=345,k5="asdf") print(dic)
输出:
三、补充
1.字符串
tempalte = "i am {name}, age : {age}" #v = tempalte.format(name='alex',age=19) ##和下面的方法效果相同 v = tempalte.format(**{"name": 'alex','age': 19}) ##加入两个**即可将字典加入 print(v)
输出:
2.字典
使用in时:
dic = {'k1' : 'v1' , 'k2' : 'v2' } v = 'k1' in dic print(v) ##输出True v = 'v1' in dic print(v) ##输出False 判断values时,使用v = 'v1' in dic.values()
3.布尔值
bool值只有 False(0) 和True(1) 两种
bool(...)经常用来判断真假
bool值为False常见的有:0 、None、空字符串、空字典、空列表、空元组,其他都是True