字典<class'dict'>是一种新的数据结构,称为映射mapping
作用和列表类似,都是用来存储对象的容器。但是列表查询数据性能很差,字典查询数据效率高。
字典可以保存多个对象,每个对象都有唯一一个名字,称为键key,这个对象称为值value。
所以字典是键值对结构,key-value。通过key可以快速查询value。
语法:z={key:value,key:value,key:value}
value可以是任意类型,str,number,list........
而key只能是不可变对象,int,str,bool,tuple...。一般为str,并且key不能重复!若出现key重复,则后面出现的值会替换前面的值。
d={} 空子典
d={'name':'孙悟空','age':18,'gender':'男'}
一、获取值的方法:
1、字典名[key] ,key是字符串,要加引号
print(d['name'])
或
n='name'
print(d[n])
2.通过方法获取值。get(key【,defauly】)
1、要查找的键在字典中时
print(d.get('name'))
2、要查找的键不在字典中时
print(d.get('hello')) 结果是None
3、也可以指定一个默认值来作为第二个参数,这样 获取不到值时就会返回默认值
print(d.get('hello','默认值')) 结果就是默认值
二、创建字典的方法:
1.用语法格式创建 ,如上代码
2.通过dict()函数来创建。
d=dict(name='孙悟空',age=18,gender='男')
这种方式创建的字典,key都是字符串。每一个参数都是一个键值对。如上代码有三个参数。
3.可将一个包含有双值子序列的序列转为字典。就是序列中的元素也是子序列,且这个子序列只有两个值,所以称之为双值子序列。如 [ (1,2),(3,5) ]
d=dict( [ ('name','孙悟空') , ('age',18) ] )
其中‘name’为key,'孙悟空'是value
三、字典的长度
len()函数获取key-value的个数,即字典的长度。
四、检查字典中是否包含指定的键
in 和 not in 返回值是bool类型
print('name' in d)检查字典d中是否有键‘name’
True
五、修改字典
1、往字典中添加key-value,d[key]=‘value’ d是字典名
d[address]='花果山'字典中没有则会自动加上
2、通过方法。setdefault(key【,default】)添加
d.setdefault('name','猪')
若key已经在字典中,则会返回key值,不会对字典有任何操作。
若key不在字典中,则会向字典添加这个key,并设置value。
3.通过方法。upgdate([other])将其他字典中的key-value添加至此字典中。
d.update(d2)
d2是其他字典,若d2中有d的重复key,则后面加入的会替换当前value.
六、删除
1、del d[key]
删除不存在的key会报错!
del d['name']
2、通过方法。popitem()随即删除一个key-value,一般就是删除最后一个。返回值就是删除的key-value,但是是以元组的形式来返回,此元组中有两个元素,一个是key,一个是value。
删除空子典会报错!
d.popitem()
3、通过方法。pop(key【,default】)根据key来删除字典中的key-value,会将被删除的value返回。
删除不存在的key会报错!
result=d.pop('z','默认值')
如果指定了默认值,则删除不存在的key时,不会报错,而是直接返回默认值
4、通过方法清空字典clear()
d.clear()
七、通过copy()方法对字典浅复制
d={'a':1,'b':2,'c':3}
d2=d
这种不算复制!!!
d['b']=10
因为是指向同一对象,修改其中一个会影响另一个。
d2=d.copy()
这种复制以后的对象和原对象是独立的,修改一个此时不会影响另一个。
注意:
d={'a':{'name':'sunwukong','age':18},'b':2,'c':3}
d2=d.copy()
d2['a']['name']='猪八戒'
此时d和d2都会变
浅复制会复制对象内部的值,若值也是一个可变对象,那么这个可变对象不会被复制。
八、遍历字典,取出所有key-value
1、keys()该方法会返回字典中所有key,该方法返回值是一个序列,该序列中保存有字典的所有的键。
d={'name':'孙悟空','age':18,'gender':'男'}
print(d.keys())
结果:
dict_keys(['name', 'age', 'gender'])
通过for循环来遍历keys()获取所有的键
for k in d.keys():
print(k)
结果:
name
age
gender
2、values(),该方法返回值是一个序列,该序列中保存有字典的所有的值。
for v in d.values():
print(v)
缺点就是只能看到value值,看不到key
3、items()该方法会返回字典的所有的项。
返回值是一个序列,该序列中包含有双值子序列。
双值分别是,字典中的key和value。
d={'name':'孙悟空','age':18,'gender':'男'}
print(d.items())
结果:
dict_items([('name', '孙悟空'), ('age', 18), ('gender', '男')])里面是元组tuple
通过循环来遍历!每一次返回的是一个元组,然后对元组进行解包。
for k,v in d.items():
print(k,'=',v)
结果:
name = 孙悟空
age = 18
gender = 男