上篇博客已经介绍了python的列表,本文介绍字典,字典也是python的基础数据类型之一。字典在python中关键字用dict表示。字典可以存储大量的数据,以及关系型数据。同样地,它也是python中唯一的映射类的数据类型。
数据类型分类有多种,而本文中将数据分类只讨论可变与不可变数据类型:
可变的(不可哈希)数据类型:list , dict, set
不可变的(可哈希)数据类型:str, int, bool, tuple
字典以“键”,“值”, 即键值对得形式存在,其形象表示为:
dic = {'键1':‘值1’,'键2':‘值2’,...,'键n':‘值n’}
字典得键必须是不可变的数据类型。(在工作中,键通常都是由数字,或者字符串(str)组成。
字典的值可以是任意数据类型,如:str,dict,list,tuple 等。
字典的优点:
1. 字典可以存储大量的数据与关系型数据,
2. 字典查询速度快。
注: python3.5之前包括3.5版本,字典都是无序的,而从python3.6开始,字典是有序的。
字典的常用操作(增,删,改,查):
字典增添方法:
字典增添方法有两种:
第一种方法为,直接对键添加内容,若原字典内有key与value,那么就直接对此key对应的内容进行修改,若没有此key则添加key与对应的值到字典中,例:
1 dic ={'name': 'colin', 'age': 27} 2 dic['name'] = 'Jenny' # {'name': 'Jenny', 'age': 27} 改 3 print(dic) 4 dic['sex'] = '男' 5 print(dic) # {'name': 'colin', 'age': 27, 'sex': '男'} 新增
第二种方法为,使用setdefault()方法,该方法表示在字典后面添加新的键值对。几种表示方法与用法表示如下:
1 dic = {'name': 'colin', 'age': 27} 2 dic.setdefault('sex') 3 print(dic.setdefault('sex')) # None 4 print(dic) # {'name': 'colin', 'age': 27, 'sex': None} 5 dic.setdefault('name','jenny') 6 print(dic) # {'name': 'colin', 'age': 27} 不做修改 7 dic.setdefault('sex','男') 8 print(dic) # {'name': 'colin', 'age': 27, 'sex': '男'}
字典删除方法:
字典的删除方法与列表一样有四种表示方法,但有所区别。其方法有:pop(), clear(), popitem(), del() 四种方法。
pop()方法举例
1 dic = {'name': 'colin', 'age': 27} 2 dic.pop('name') 3 print(dic) # {'age': 27} 4 dic.pop('name1') 5 print(dic) # 报错 无 'name1' 7 print(dic.pop('name1', None)) # None 8 dic.pop('name1', None) 9 print(dic) # 不报错 {'name': 'colin', 'age': 27} 11 print(dic.pop('name1', '没有此键...')) # 没有此键... 12 print(dic) # {'name': 'colin', 'age': 27}
clear()方法举例
1 dic = {'name': 'colin', 'age': 27} 2 dic.clear() # 清空 3 print(dic) # {}
popitem()方法举例
1 dic = {'name': 'colin', 'age': 27} 2 dic.popitem() 3 print(dic.popitem()) # ('name', 'colin') 返回一个元组 4 print(dic) # {'name': 'colin'} 默认删除最后一个键值对
del方法举例
1 dic = {'name': 'colin', 'age': 27} 2 del dic # 删除整个字典 3 print(dic) # 报错 4 del dic['name'] # {'age': 27} 通过删除键来删除键值对 5 print(dic)
字典的改方法:
字典的改方法通常有两种,一种是在增里面介绍了,与前面类似,第二种方法为update()方法,其使用方法在下列例子中说明;
1 dic = {'name': 'colin', 'age': 27, 'sex': 'male'} 第一种 3 dic['age'] = 25 # {'name': 'colin', 'age': 25, 'sex': 'male'} 4 print(dic) 第二种 update() 6 dic = {'name': 'colin', 'age': 27, 'sex': 'male'} 7 dic2 = {'name': 'Jenny', 'weight': 75} 8 dic.update(dic2) # 将dic2中的所有键值对覆盖并添加到dic中,dic2不变 9 print(dic) # {'name': 'Jenny', 'age': 27, 'sex': 'male', 'weight': 75}
此外,update()还有添加若干键值对的方法,如:
1 dic2 = {'name': 'Jenny', 'weight': 75} 2 # dic2.update(a = '222') 3 # print(dic2) # {'name': 'Jenny', 'weight': 75, 'a': '222'} 4 dic2.update(a = '222', b = '666') 5 print(dic2) # {'name': 'Jenny', 'weight': 75, 'a': '222', 'b': '666'}
字典的查询方法:
字典的查询方法有get() ,keys(), value(), items()几种方法,其使用方法如下面代码:
get()方法:
1 dic = {'name': 'colin', 'age': 27, 'sex': 'male'} 2 print(dic.get('name')) # colin 3 print(dic.get('name1')) # None 4 print(dic.get('name1', '没有此键...')) # 没有此键...
keys()方法:
keys() 打印所有键, 其类型类似于列表的容器。
1 dic = {'name': 'colin', 'age': 27, 'sex': 'male'} 2 print(dic.keys(), type(dic.keys())) # dict_keys(['name', 'age', 'sex']) <class 'dict_keys'> 3 l1 = list(dic.keys()) # ['name', 'age', 'sex'] 将类似列表的容器转化为列表类型 4 print(l1) 5 for key in dic.keys(): # 发现dic.key()可以遍历 6 print(key)
value()方法:
value() 打印所有键值 ,其类型类似于列表的容器。
1 dic = {'name': 'colin', 'age': 27, 'sex': 'male'} 2 print(dic.values()) # dict_values(['colin', 27, 'male']) 3 print(list(dic.values())) # ['colin', 27, 'male']
items()方法
items() 按元组形式打印键值对。
1 dic = {'name': 'colin', 'age': 27, 'sex': 'male'} 2 print(dic.items()) # dict_items([('name', 'colin'), ('age', 27), ('sex', 'male')]) 3 print(list(dic.items())) # [('name', 'colin'), ('age', 27), ('sex', 'male')] 4 for i in dic.items(): # ('name', 'colin') ('age', 27) ('sex', 'male') 即按元组形式打印键值对 5 print(i) 6 for k, v in dic.items(): # name colin age 27 sex male # k,v分别代表键与值 7 print(k, v)
分别赋值:
1 a, b = 10, 20 2 print(a, b) # 10 20 3 a, b = [10, 20] 4 print(a, b) # 10 20 5 a, b = [(1, 2), (3, 4)] 6 print(a, b) # (1, 2) (3, 4) 7 a = 10 8 b = 20 9 a, b = b, a # 赋值操作,先计算右边的赋值运算,再算左边的赋值操作 10 print(a, b) # 20 10
每日一练:
1 dic = {'name_list': ['王双', 'alex', '孙飞', 'taibai'], 2 1: {'name': 'taibai', 'age': 18, 'sex': '男'}, 3 (1, 2): [100, {'ip': '192.168.1.1', 'port': 3306}] 4 } 5 # 1,给 name_list对应的列表追加一个值: 司徒大人. 6 dic['name_list'].append('司徒大人') 7 print(dic) 8 # 2,将name_lsit对应的alex 变成全部大写. 9 dic['name_list'][1] = dic['name_list'][1].upper() 10 print(dic) 11 # 3, 将1对应的字典添加一个键值对: weight : 75 12 dic[1].setdefault('weight', 75) 13 print(dic) 14 # 4,将1 对应的字典的name键对应的名字taibai 换成alex 15 dic[1]['name'] ='alex' 16 print(dic) 17 # 5,将 {'ip': '192.168.1.1', 'port': 3306} 次字典的port键值对删除. 18 dic[(1, 2)][1].popitem() 19 print(dic)