不可变类型:数字,字符串,元组
可变类型:列表,字典
字典的键必须为不可变类型,键值可以是任意类型
字典的两大特点:无序(输出时顺序不一定按照创建时的顺序输出),键唯一;
创建字典:
1 dic={ 'name':'chen' , 'age':23 , 'birthday':'1996.9.23' , (1,2,3):[1,2,3] } 2 dic2=dict((('name','chendong'),('age',23)))
还可以通过关键字创建字典
3 dic3=dict(name='chendong',age='23') #注意这里的键值没有引号
字典的操作:
dic1={'name':'chen','age':23}
增加:
1.
dic1['birthday']='1996.9.23'
2.
ret=dic1.setdefault('name','abc') print(dic1) #输出{'name':'chen','age':23},若键存在,则不添加 print(ret) #输出‘chen’,返回结果为原来的键值 ret2=dic1.setdefault('hobby','play') #输出{'name':'chen','age':23,‘hobby’:'play'},若键不存在,则添加新键 print(ret2) #输出'play',返回结果为新的键值
查找:
1.
print(dic1['name']) #输出‘chen’
2.
print(dic1.keys()) #返回所有的键,类型为dict_keys,若要返回一个列表,则print(list(dic1.keys()))
3.
print(dic1.values()) #返回所有的键值,类型为dict_values
4.
print(dic1.items()) #以元组的形式返回所有的键值对 dict_items([('name', 'chen'), ('age', 23)])
5.get()方法
get()方法返回指定键的值,如果值不再字典中,则返回默认值
语法如下:
dict.get(key,default=None)
此语法中dict代表指定字典,key代表字典中要查找的键,default代表指定键的值不存在时返回默认值。
student={'小明':1001,'小红':1002} print('小明的学号是:%s'%student.get('小明'))
使用其他方法试图访问字典中不存在的项时会出错,而get()方法不会
修改:
1.
dic1['name']='cd' print(dic1) #输出{'name':'cd','age':23}
2.update()方法
dic2={'name1':'chendo','age':'12'} dic1.update(dic2) print(dic1) #输出结果把字典dic2加到dic1上去,若dic2中有与dic1中相同的键名,则覆盖原来的键值
删除:
1.del
del dic1['name'] #删除dic1字典的name键值对
2.clear()方法
dic1.clear() #清空字典
3.pop()方法
ret=dic1.pop('name') print(ret) #输出由pop()方法返回的删除的键值 print(dic1) #输出删除当前键后的字典
4.popitem()方法
随机删除一个键值对,并以元组返回删除的键值对
字典的格式化字符串:
使用字典(前提是只以字符串作为键)来格式化字符串:
>>> student={'小明':1,'小红':2,'小刚':3}
>>> print('小明的学号是:%(小明)s,小刚的学号是:%(小刚)s'%student)
小明的学号是:1,小刚的学号是:3
可见字典的格式化方式是在每个转换说明符的%字符后面加上用圆括号括起来的键,再跟上其他说明元素。
字典的其他常用方法及操作:
1.fromkeys()方法
dic=dict(fromkeys(['name1','name2','name3'],'chen')) print(dic)
#输出结果为{'name1': 'chen', 'name2': 'chen', 'name3': 'chen'}
但这个方法存在一些问题,涉及到深浅拷贝的问题,以后再讨论
2.字典的排序:
sorted()函数
dic{2:'2',1:'1','3':'3'} print(sorted(dic)) #s输出[1, 2, 3]
print(sorted(dic.values())) #输出['1', '2', '3']
print(sorted(dic.items())) #输出[(1, '1'), (2, '2'), (3, '3')]
3.字典的遍历
(1)
dic={ 'name':'chen' , 'age':23 , 'birthday':'1996.9.23' , (1,2,3):[1,2,3] } for i in dic: print(i)
输出:
name
age
birthday
(1, 2, 3)
输出键,若想输出键值对,print(i,dic[i])
(2)
dic={ 'name':'chen' , 'age':23 , 'birthday':'1996.9.23' , (1,2,3):[1,2,3] } for i,v in dic.items(): print(i,v)
两种方法推荐用第一种,效率高