Python3.5 笔记

Python3.5 笔记——第5章 字典

2018-08-17  本文已影响0人  行者无疆_1024

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'}
上一篇下一篇

猜你喜欢

热点阅读