python学习笔记之字典

it2022-05-05  243

创建和使用字典

字典的创建格式如下

d= {key1: value1 , key2:value2}

字典由多个键及其对应的值构成的对组成(把键/值对称为项)。字典的每个键/值对用冒号(:)分割,每个项之间用逗号(,)分割,整个字典包括在花括号({})中 键必须是唯一的,但值不必。值可以取任何数据类型,键必须是不可变的,如字符串,数字或元组

1.dict函数

可以用dict函数通过其他映射或键/值序列对建立字典

>>> students={('name','小明'),('number','250')} >>> a=dict(students) >>> print('学生详细信息: ',a) 学生详细信息: {'name': '小明', 'number': '250'} >>> >>> print('学生姓名:',a['name']) 学生姓名: 小明 >>> print('学号:',a['number']) 学号: 250

dict函数可以通过关键字参数创建字典

>>> a=dict(name='小黑',number='252') >>> print('学生详细信息,',a) 学生详细信息, {'name': '小黑', 'number': '252'}

2.字典的基本运用

1.修改字典 向字典添加新内容的方法是增加新键/值对,例如

>>> student={'小明':'250','小黑':'252'} >>> student['小黑']='251' #修改小黑的学号 >>> print('小黑的学号是:%(小黑)s'%student) #注意这里的转义方式 小黑的学号是:251 #修改成功 >>> student['小白']='253' #添加新学生 >>> print('小白的学号是:%(小白)s'%student) 小白的学号是:253 #添加成功

2.删除字典元素 使用del命令

>>> student {'小明': '250', '小黑': '251', '小白': '253'} >>> del student['小明'] #删除 小明 的键 >>> student {'小黑': '251', '小白': '253'}

除了删除键以外,还可以删除整个字典

>>> del student >>> student Traceback (most recent call last): File "<pyshell#50>", line 1, in <module> student NameError: name 'student' is not defined

执行del之后无法再访问原来的字典,因为字典已经不存在了

3.字典的特性 (1)不允许同一个键出现两次。创建时如果同一个键被赋值两次,后面的值会被记住

>>> student={'小黑':'520','小明':'250','小白':'521','小白':'620'} >>> student {'小黑': '520', '小明': '250', '小白': '620'}

(2)键必须不可变,可以用数字,字符串或元组充当,不能用列表

>>> a={['name']:'小A','number':'25000'} Traceback (most recent call last): File "<pyshell#55>", line 1, in <module> a={['name']:'小A','number':'25000'} TypeError: unhashable type: 'list'

由上,不能用列表做键,否则会提示类型错误

4.len函数 len(dict)函数用于计算字典元素的个数,即键的总和

>>> student {'小黑': '520', '小明': '250', '小白': '620'} >>> len(student) 3

5.type函数 type(variable)函数返回输入的变量类型,如果输入的变量是字典,就返回字典类型

>>> student {'小黑': '520', '小明': '250', '小白': '620'} >>> type(student) <class 'dict'

3.字典的格式化字符串

字典的格式化方法是在每个转化说明符中的%字符后加上用圆括号括起来的键,再跟上其他元素说明

>>> print('小黑的学号是:%(小黑)s'%student) #注意这里的转义方式 小黑的学号是:251

4.字典和列表的区别

dict的特点是: (1)查找和插入的速度极快,不会随着key的增加而变慢 (2)需要占用大量内存,内存浪费很多

list的特点是: (1)查找和插入时间随着元素的增加而增加 (2)占用空间少,浪费内存很少

***dict内部存放的顺序和键放入的顺序没有关系

5.字典方法

1.clear 用于删除字典内的所有项

dict.clear()

该方法不需要参数。该函数是一个原地操作(类似于list.sort)函数,没有任何返回值(返回值为None)

>>> student.clear() >>> student {} >>> print('元素个数为:',len(student)) 元素个数为: 0

字典调用clear后整个字典内所有项都被删除

>>> x={} >>> y=x >>> x['key']='value' >>> y {'key': 'value'} >>> x={} >>> y {'key': 'value'} >>> x={} >>> y=x >>> x['key']='value' >>> x.clear() >>> y {}

两个示例中,x和y最初对应同一个字典,示例1中通过将x关联到一个新的空字典对它重新赋值,这对y没有任何影响,还关联到原先的字典。若想清空原始字典的所有元素,则必须使用clear方法,使用clear后,y的值也被清空了

2.copy 返回一个具有相同键/值对的新字典。这个方法是浅复制,因为值本身是相同的,而不是副本。

dict.copy

该方法不需要参数。返回结果为一个字典的浅复制 浅复制:

>>> student={'小明':'250','info':['小黑','小白','man']} >>> st=student.copy() >>> st['小明']='2500' >>> st {'小明': '2500', 'info': ['小黑', '小白', 'man']} >>> student {'小明': '250', 'info': ['小黑', '小白', 'man']} >>> st['info'].remove('man') >>> st {'小明': '2500', 'info': ['小黑', '小白']} >>> student {'小明': '250', 'info': ['小黑', '小白']}

由输出结果看到,替换副本的值时原始字典不受影响,如果修改了某个值(原地修改,不是替换),原始字典就会改变,因为同样的值也在原字典中,以这种方式复制就是浅复制

3.fromkeys 用于创建一个新字典

dict.fromkeys(seq[,value])

此语法中,dict代表指定字典,seq代表字典键值列表,value代表可选参数,设置键序列(seq)的值,该方法返回结果为列表。

>>> seq=('name','age','lover') >>> info=dict.fromkeys(seq) >>> print('新的字典为:%s'%info) 新的字典为:{'name': None, 'age': None, 'lover': None} >>> info = dict.fromkeys(seq,10) >>> print('新的字典为:%s'%info) 新的字典为:{'name': 10, 'age': 10, 'lover': 10}

由输出结果看出,fromkeys方法使用给定的键建立新字典,每个键默认对应的值为None

4.get 返回指定键的值如果值不在字典中,就返回默认值

dict.get(key,default=None)

key代表字典中要查找的键,default代表指定键的值不存在时返回默认值。该方法返回结果为指定键的值,如果值不在字典中,就返回默认值

>>> student={'小黑':'100','小白':'200'} >>> print('小黑%s'%student.get('小黑')) 小黑100 >>> st={} >> print(st['name']) Traceback (most recent call last): File "<pyshell#94>", line 1, in <module> print(st['name']) KeyError: 'name' >>> print(st.get('name')) None >>> print(st.get('name','未找到匹配项')) 未找到匹配项

由输出结果可以看到,以其他方式访问字典中不存在的元素的时候会报错。而以get访问时会返回None或者返回自定义的默认值

5.key in dict 用于判断键是否存在于字典中,如果键在字典中返回True,否则返回False

key in dict >>> student={"小黑":'150','小白':'151'} >>> print('检查小黑是否在字典中:%s'%('小黑'in student)) 检查小黑是否在字典中:True >>> print('检查小明是否在字典中:%s'%('小明'in student)) 检查小明是否在字典中:False

6.items() 用于列表返回可遍历的(键/值)元组数组

dict.items()

不需要参数

>>> print(student.items()) dict_items([('小黑', '150'), ('小白', '151')])

由输出结果看到,返回结果为一个元组数组

7.keys 用于返回一个字典的所有键

dict.keys()

不需要传参

>>> student {'小黑': '150', '小白': '151'} >>> print(student.keys()) dict_keys(['小黑', '小白'])

返回值为一个元组数组,数组中包含字典中的所有键

8.setdefault 用于获得与给定键相关联的值,如果键不存在于字典中,就会添加键并将值设为默认值

dict.setdefault(key,degult=None)

default代表键不存在时设置的默认键值,该方法没有任何返回值

>>> student {'小黑': '150', '小白': '151'} >>> print('小黑的键值为:%s'%student.setdefault('小黑')) 小黑的键值为:150 >>> print('小明的键值为:%s'%student.setdefault('小明')) 小明的键值为:None >>> print('student字典新值为:%s'%student) student字典新值为:{'小黑': '150', '小白': '151', '小明': None}

由输出结果看到,当键不存在时,setdefault方法返回默认值并更新字典,如果键存在,就返回与其对应的值,不改变字典,和get一样,默认值可以选择,如果不设定就使用None

>>> student {'小黑': '150', '小白': '151'} >>> student.setdefault('小明','250') '250' >>> student {'小黑': '150', '小白': '151', '小明': '250'}

9.update 用于把字典dict2的键/值对更新到dict里

dict.update(dict2)

该方法没有任何返回值

>>> student {'小黑': '150', '小白': '151', '小明': '250'} >>> student2={'小明':'250'} >>> student.update(student2) >>> student {'小黑': '150', '小白': '151', '小明': '250'} >>> student3={'小明':'251'} >>> student.update(student3) #对相同项覆盖 >>> student {'小黑': '150', '小白': '151', '小明': '251'}

10.values 以列表形式返回字典中的所有值。与返回键的列表不同,返回的列表中可以包含重复的元素

dict.values()

该方法不需要参数 返回结果为字典中的所有值

>>> student {'小黑': '150', '小白': '151', '小明': '251'} >>> student.values() dict_values(['150', '151', '251']) >>> list(student.values()) ['150', '151', '251'] >>>

最新回复(0)