Python3.5笔记
第五章 字典
什么是字典
字典是Python中唯一内建的映射类型,字典指定值没有特定的顺序,都储存在一个特定的键(key)里,键可以是数字、字符串或者元组,值可以是任何类型。
字典的创建和使用
字典由多个键及其对应的值构成的对组成(把键/值对称为项)。字典的每个键/值(key/value)对用冒号(:)分割,每个项用逗号分割,整个字典包括在花括号{}中。空字典由两个花括号{}组成。语法格式如下:
map = {key1:value1,key2:value2,key3:value3...}
其中,键必须是唯一的,值不需要唯一。值可以是任意数据类型,但键必须是不可变的,如:字符串、数字、元组。
实例:
dict1 = {'小智':1001,'小明':1002,'小强':1003}
print(dict1)
print(dict1['小智'])
输出:
{'小智': 1001, '小明': 1002, '小强': 1003}
1001
通过dict()函数创建字典
可以用dict()函数,通过其他映射(如其他字典)或键/值序列对,建立字典。如:
student = [('小智','1001'),('小明','1002'),('小强','1003')]
detail = dict(student)
print(detail)
输出:
{'小强': '1003', '小明': '1002', '小智': '1001'}
dict函数可以通过关键字参数创建字典。例如:
detail2 = dict(name='小智',number=1002)
print(detail2)
输出:
{'number': 1002, 'name': '小智'}
字典的基本操作
修改、新增元素
向字典增加新内容是增加新键/值对,修改或删除已有键/值对。如:
student = {'小智':1001,'小明':1002,'小强':1003}
student['小强'] = 'hello'
print(student)
student['小张'] = 1004
print(student)
输出:
{'小明': 1002, '小智': 1001, '小强': 'hello'}
{'小张': 1004, '小明': 1002, '小智': 1001, '小强': 'hello'}
删除字典中的元素、删除字典
此处的删除指的是显示删除,显示删除使用del命令,如:
del student['小智'] #删除字典中的元素
print(student)
del student #删除整个字典
print(student)
{'小强': 'hello', '小张': 1004, '小明': 1002}
Traceback (most recent call last):
File "D:/pyspace/hellopython/Chapter5.py", line 29, in <module>
print(student)
NameError: name 'student' is not defined
字典的特性
键不可以重复出现
键不可以重复出现,键重复出现时,只保留后面的值,如:
student = {'小智':1001,'小明':1002,'小强':1003,'小智':1005}
print(student)
{'小强': 1003, '小智': 1005, '小明': 1002}
键必须是不可变的
键必须是不可变的,所以,可以用数字、字符串、元组,不可以用列表。
student = {['小智']:1001}
print(student)
输出:
Traceback (most recent call last):
{'小智': 1001, '小明': 1002, '小强': 1003}
File "D:/pyspace/hellopython/Chapter5.py", line 36, in <module>
1001
student = {['小智']:1001}
--------------通过dict()函数创建字典----------------
TypeError: unhashable type: 'list'
#student = {['小智']:1001} #键必须是不可变的,不可以是列表
student = {('小智'):1001} #键必须是不可变的,可以是元组
print(student)
输出:
{'小智': 1001}
len()函数
len()函数用于统计字典中元素的个数。语法格式如下:
len(dict)
示例:
student = {'小智':1001,'小明':1002,'小强':1003,'小智':1005}
print("student字典的长度是%d" % len(student))
输出:
student字典的长度是3
type()函数
type()函数用于返回输入的变量类型,如果输入的变量是字典,就返回字典类型。语法格式如下:
type(var1)
示例:
student = {'小智':1001,'小明':1002,'小强':1003,'小智':1005}
print("student字典的类型是%s" % type(student))
输出:
student字典的类型是<class 'dict'>
字典的格式化
字典的格式化方式是在,每个转换说明符号%后,加上用圆括号括起来的键。再跟上其他元素。如:
student = {'小智':1001,'小明':1002,'小强':1003,'小智':1005}
print("student字典中小明的学号是%(小明)s" % student)
输出:
student字典中小明的学号是1002
字典和list的区别
字典 | list |
---|---|
查找和插入的速度极快,操作时间不会随着key的增加而增加 | 查找和插入的时间,会随着元素的增加而增加 |
需要占用大量的内存,内存浪费多 | 占用空间少,浪费内存小 |
字典的方法
1、clear()方法
clear()方法用于清空字典中的所有元素,clear()方法没有返回值,而是直接该表字典的值。语法格式如下:
dict.clear()
示例:
student = {'小智':1001,'小明':1002,'小强':1003,'小智':1005}
student.clear()
print("student字典中元素的个数是:%d" % len(student))
输出:
student字典中元素的个数是:0
clear()方法和赋空值的区别
student = {'小智':1001,'小明':1002,'小强':1003,'小智':1005}
studentCopy = student
student.clear()#当使用clear()方法时,studentCopy的值也被清空了
print(student)
print(studentCopy)
student = {'小智':1001,'小明':1002,'小强':1003,'小智':1005}
studentCopy = student
student = {}#当通过空字典重新赋值时,studentCopy的值没有变化,还是指向原先的值
print(student)
print(studentCopy)
输出:
{}
{}
{}
{'小明': 1002, '小强': 1003, '小智': 1005}
2、copy()方法
copy()方法返回一个具有相同键/值对的新字典。这个方法是浅复制,因为值本身是相同的,而不是副本。语法如下:
dict.copy()
返回值是一个字典的浅复制。
示例:
student = {'小智':1001,'小明':1002,'小强':1003}
studentCopy = student.copy()
print("student字典copy的结果是:",studentCopy)
输出:
student字典copy的结果是: {'小智': 1001, '小强': 1003, '小明': 1002}
什么是浅复制?
浅复制是指,复制后的副本和原来的对象,只是值相同,但是指向的是不同的对象,而不是同一个对象。所以改变A的值不会影响B,同样改变B的值,也不会影响A。如:
student = {'小智':1001,'小明':1002,'小强':1003}
studentCopy = student.copy()
print("student字典copy的结果是:",studentCopy)
studentCopy['小强']=2018
print("更新copy后的值:更新后的studentCopy是:",studentCopy)
print("更新copy后的值:student是:",student)
del studentCopy['小强']
print("删除copy后的值:更新后的studentCopy是:",studentCopy)
print("删除copy后的值:student是:",student)
student['小明'] = 3333
print("更新原始值:更新后的studentCopy是:",studentCopy)
print("更新原始值:student是:",student)
del student['小强']
print("删除原始值:更新后的studentCopy是:",studentCopy)
print("删除原始值:student是:",student)
输出:
student字典copy的结果是: {'小智': 1001, '小强': 1003, '小明': 1002}
更新copy后的值:更新后的studentCopy是: {'小智': 1001, '小强': 2018, '小明': 1002}
更新copy后的值:student是: {'小智': 1001, '小强': 1003, '小明': 1002}
删除copy后的值:更新后的studentCopy是: {'小智': 1001, '小明': 1002}
删除copy后的值:student是: {'小智': 1001, '小强': 1003, '小明': 1002}
更新原始值:更新后的studentCopy是: {'小智': 1001, '小明': 1002}
更新原始值:student是: {'小智': 1001, '小强': 1003, '小明': 3333}
删除原始值:更新后的studentCopy是: {'小智': 1001, '小明': 1002}
删除原始值:student是: {'小智': 1001, '小明': 3333}
3、fromkeys()方法
fromkeys()方法用于创建一个新字典,以序列seq中的元素做为key,value为字典中所有元素对应的初始值。格式如下:
dict.fromkeys(seq[,value])
其中,dict代表指定的字典,seq代表字典键值列表,value代表可选参数,为键的值,如果不指定则为None,如果指定则给所有的key统一赋初值。
示例:
seq = ('name','age','sex')
print(dict.fromkeys(seq))
print(dict.fromkeys(seq,10))
输出:
{'name': None, 'sex': None, 'age': None}
{'name': 10, 'sex': 10, 'age': 10}
4、get()方法
get()方法用于返回指定键的值,如果值不在字典中,则返回默认值。语法如下:
dict.get(key,default=None)
示例:
student = {'小智':1001,'小明':1002,'小强':1003}
print("student中小智的学号是:%s" % student.get('小智'))
print("student中小智的学号是:%s" % student['小智'])#使用字典下标取值
print("student中小张的学号是:%s" % student.get('小张','没有这个人'))#get()方法取值不存在时,不会报错
print("student中小张的学号是:%s" % student['小张'])#使用字典下标取值不存在时,会报错。
输出:
student中小智的学号是:1001
student中小智的学号是:1001
student中小张的学号是:没有这个人
print("student中小张的学号是:%s" % student['小张'])
{'小智': '1001', '小明': '1002', '小强': '1003'}
KeyError: '小张'
5、key in dict方法
Python字典in操作符用于判断键是否存在于字典中,如果键在dict中就返回true,否则返回false。语法格式如下:
key in dict
示例:
student = {'小智':1001,'小明':1002,'小强':1003}
print("小智在字典中:%s" % ('小智' in student))#注意要用括号括起来,否则输出为false
输出:
小智在字典中:True
6、items()方法
items()方法返回可遍历的元素列表。语法格式如下:
dict.items()
示例:
student = {'小智':1001,'小明':1002,'小强':1003}
print(student.items())
输出:
dict_items([('小明', 1002), ('小强', 1003), ('小智', 1001)])
7、keys()方法
keys()方法以列表返回一个字典所有键。语法格式如下:
dict.keys()
示例:
student = {'小智':1001,'小明':1002,'小强':1003}
print(student.keys())
输出:
dict_keys(['小智', '小明', '小强'])
8、setdefault()方法
setdefault()方法,用于获得与给定键相关联的值。如果值在字典中不存在,就会添加键并将值设为默认值。此方法没有返回值。语法格式如下:
dict.setdefault(key,default=None)
示例:
student = {'小智':1001,'小明':1002,'小强':1003}
print("student中小智的学号是:%s" % student.setdefault('小智'))
print("student中小智的学号是:%s" % student.setdefault('小智',2001))#key存在的话,返回key的值,不改变key对应的值
#print("student中小张的学号是:%s" % student.setdefault('小张')) #如果不指定值,则默认值为None
print("student中小张的学号是:%s" % student.setdefault('小张',1004)) #key不存在,存在指定值,则value=指定值
print("student中小张的学号是:%s" % student['小张'])
输出:
student中小智的学号是:1001
student中小智的学号是:1001
student中小张的学号是:1004
student中小张的学号是:1004
9、update()方法
update()方法用于把字典dict2中键/值更新到指定dict里。语法格式如下:
dict.update(dict2)
示例:
student = {'小智':1001,'小明':1002,'小强':1003}
studentb = {'小张':1004,'小李':1005}
student.update(studentb)
studentc = {'小张':2001,'小李':2002}#相同的项会覆盖
student.update(studentc)
print(student)
输出
{'小智': 1001, '小张': 2001, '小强': 1003, '小明': 1002, '小李': 2002}
10、values()方法
values()方法以列表的形式返回字典中所有的值。与返回键的列表不同的是
习题
#用dict函数实现存储一个人的姓名、手机号和地址信息
person = [('姓名','张三'),('手机号','13388886666'),('地址','火星')]
print(dict(person))
#创建一个字典,里面元素的键/值全部由字符串组成,然后更改某个元素,更改其
#值为非字符串形式
student = {'小智':'1001','小明':'1002','小强':'1003'}
# student['小智'] = 2018
student['小智'] = ['2018','世界杯']
print(student)
输出:
{'姓名': '张三', '地址': '火星', '手机号': '13388886666'}
{'小强': '1003', '小智': ['2018', '世界杯'], '小明': '1002'}
网友评论