python学习笔记-day05 字典
数据类型
数据类型可以分为可变数据类型和 不可变数据类型两种:
不可变数据类型:元组(tuple),bool, int, str(对字符串的任何操作都是产生一个新的str,园幼儿字符串是不变的)
可变数据类型: 列表(ist),字典(dict)
字典
字典:映射结构,字典的key必须是不可变数据类型(元组,bool int ,str)
字典的优点:二分查找;可存储大量的关系型数据
增:
1.直接增加键值对:
dic={'name':'xuanxuan','age':22,'gender':'female'} dic['hobbi']='dancing' print(dic)
运行结果:
dic={'name':'xuanxuan','age':22,'gender':'female'} dic['hobbi']='dancing' print(dic)
如果添加的键值是字典中已经存在的键,则会覆盖该键对应的原来的值:
dic={'name':'xuanxuan','age':22,'gender':'female'} dic['hobbi']='dancing' #如果没有,会增加 dic['name']='xuanzhang' #如果有,会覆盖 print(dic)
运行结果:
{'name': 'xuanzhang', 'age': 22, 'gender': 'female', 'hobbi': 'dancing'}
2.setdefault()方法:
dic={'name':'xuanxuan','age':22,'gender':'female'} dic.setdefault('hobbi') #值缺省,默认添加的对应该键的值为None # dic.setdefault('hobbi','dancing') print(dic)
运行结果:
{'name': 'xuanxuan', 'age': 22, 'gender': 'female', 'hobbi': None}
如果setdefault()后面value对应的参数有值,则添加:
dic={'name':'xuanxuan','age':22,'gender':'female'} # dic.setdefault('hobbi') #值缺省,默认添加的对应该键的值为None dic.setdefault('hobbi','dancing') print(dic)
运行结果:
{'name': 'xuanxuan', 'age': 22, 'gender': 'female', 'hobbi': 'dancing'}
如果setdefault中的键已经存在,则无任何变化:
dic={'name':'xuanxuan','age':22,'gender':'female'} dic.setdefault('name','xuan') print(dic)
运行结果:
{'name': 'xuanxuan', 'age': 22, 'gender': 'female'}
所以,通过dict[key]=value 和dict.setdefault(key,value)方法的区别是:
当key在字典中不存在时,两种方法都是在字典中增加该键值对;
当key在字典中已经存在时,前者会修改,即覆盖,后者不会修改原来的值,即无变化,不进行任何操作;
删:
dic.pop(key)方法: 有返回值,返回键对应的值
dic={'name':'xuanxuan','age':22,'gender':'female'} return_value=dic.pop('name') # pop()方法有返回值,返回该键对应的值 print(return_value)
运行结果:
xuanxuan
dic.popitem():随机删除字典的键值对(python3.6字典有序,删最后一个),有返回值,返回键值对组成的tuple
dic={'name':'xuanxuan','age':22,'gender':'female'} return_value=dic.popitem() # pop()方法有返回值,返回该键对应的值 print(return_value)
运行结果:
('gender', 'female')
dict.clear() #不是从内存中删除,只是删除字典中的元素,clear之后字典为空
dic={'name':'xuanxuan','age':22,'gender':'female'} dic.clear() #不是从内存中删除,没有返回值 print(dic) #字典空
运行结果:
{}
del dict : 删除字典,从内存中彻底删除,也可以指定删除某一个键
dic={'name':'xuanxuan','age':22,'gender':'female'} del dic['name'] #可以删掉字典中的某一个键值对 print(dic)
运行结果:
{'age': 22, 'gender': 'female'}
删除整个字典(从内存)
dic={'name':'xuanxuan','age':22,'gender':'female'} del dic #从内存中删掉字典 print(dic) #会报错
运行结果:
Traceback (most recent call last): File "F:/workspace_python/pycharm_projects/fullstack2018-08-17/week2/day07/01.py", line 12, in <module> print(dic) #会报错 NameError: name 'dic' is not defined
改:
1. 可以直接指定键,通过赋值修改(因为字典是可变对象)
dic={'name':'xuanxuan','age':22,'gender':'female'} dic['name']='xuan' print(dic)
运行结果:
{'name': 'xuan', 'age': 22, 'gender': 'female'}
2.dict1.update(dict2) 会更新dict1(按照dict2)
dict2有dict1中的键,则会覆盖dict1,如果dict1中没有,则会追加到dict1
dic={'name':'xuanxuan','age':22,'gender':'female'} dic2={'name':'xuanzhang','job':'student'} dic2.update(dic) print(dic2)
运行结果:
{'name': 'xuanxuan', 'job': 'student', 'age': 22, 'gender': 'female'}
查:
dict.keys() #返回字典的键,返回的结果可以当做list操作
dict.values() #返回字典的值,返回的结果可以当做list操作
dic.itmes() #返回字典的键值 成一个tuple 返回的结果可以当做list操作
dic={'name':'xuanxuan','age':22,'gender':'female'} print(dic['name'])
运行结果:
xuanxuan
dic={'name':'xuanxuan','age':22,'gender':'female'} print(dic.keys()) #返回的是dic的键,可以按照list进行操作 print(dic.values()) #返回的是dic的值,可以相当于list进行操作 print(dic.items()) #返回的是键值组成的tuple
运行结果:
dict_keys(['name', 'age', 'gender']) dict_values(['xuanxuan', 22, 'female']) dict_items([('name', 'xuanxuan'), ('age', 22), ('gender', 'female')])
dic={'name':'xuanxuan','age':22,'gender':'female'} for i in dic: # for i in dic.keys():两种方法都是返回dic的key print(i)
运行结果:
name
age
gender
dic.values()
for i in dic.values(): print(i)
运行结果:
xuanxuan 22 female
dic.items()
dic={'name':'xuanxuan','age':22,'gender':'female'} for i in dic.items(): print(i)
运行结果:
('name', 'xuanxuan') ('age', 22) ('gender', 'female')
dic.get(key,None) #返回字典的对应的值,当键不存在时,可以返回默认值None,当然也可以设置
dic={'name':'xuanxuan','age':22,'gender':'female'} print(dic.get('name')) #xuanxuan print(dic.get('name1','该键值不存在')) #并不会报错,
运行结果:
xuanxuan
该键值不存在