python学习笔记之字典

创建和使用字典

字典的创建格式如下

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']
>>> 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值