Python序列(三):字典的基本操作和方法

目录

创建字典

字典的基本操作 

访问字典

修改和添加元素

删除/清空元素

字典方法

汇总目录

.keys()

.values()

.items() 

.get()

.setdefault()

.copy()

.pop()

.popitem()

.clear()

.update()


在列表和元组中,通常是使用索引来找到目标元素的。假如有如下两个列表,按顺序分别存放学生的姓名和学号:

Names = ['Li Hua', 'Julie', 'Zhang San']
School_number = ['202310000', '202310001', '202310002']

当我们想查到Julie的学号,就需要先在第一个列表找到Julie姓名的索引,然后在第二个列表用索引来查询她的学号:

print('Julie\'s school number is', School_number[Names.index('Julie')])

这里使用了.index()方法来查询Julie的索引,代码运行结果为:

d18bd62a398f4f76883b40634e6cff0d.png但这样并不太方便,在大多数情况下我们更希望直接输入Julie就能查到她的学号信息,也就是通过特定的词来找到特定的元素,字典恰好满足这个要求。

创建字典

字典的创建格式为:

dict1 = {key1: value1, key2: value2, key3: value3}
dict2 = {}  #空字典

字典由键(key)和其对应的值(value)组成,键与值之间用冒号( : )分隔;每一对键-值称为,项之间用逗号分隔。整个字典用花括号{}包括在内。花括号内没有内容即为创建了一个空字典。

键必须是唯一的,而且必须是不可变的(比如字符串、数字、元组类型),如果出现重复的键,访问时后者会覆盖前者。

值可以不唯一,而且可以取任何数据类型

dict1 = {'Time': '18:24', 123: [1, 2, 3], 'Afternoon': '18:24'}
print(dict1[123])   #输出结果为[1, 2, 3]

现在可以创建一个字典来取代刚刚储存姓名和学号的两个列表了,还可以达到通过直接访问名字来得到其学号信息:

database1 = {'Li Hua': '202310000', 'Julie': '202310001', 'Zhang San': '202310002'}
print(database1['Julie'])   #输出为202310001

 此外使用dict函数可以从其他映射或字典来创建字典:

data = [('Li Hua', '202310000'), ('Julie', '202310001')]
dict1 = dict(data)

字典的基本操作 

访问字典

将相对应的键名放到字典后的方括号中即可访问:

Game = {'Mobagame': ['Dota', 'Lol'], 'FPSgame': 'Crossfire'}
print(Game['Mobagame'])   #输出为['Dota', 'Lol']

如果不确定字典内是否有某种键元素可以使用in检查

print('Mobagame' in Game)   #结果为True

修改和添加元素

通过以下方式对字典内的值进行修改:

dict1[key] = new_value

如果想增加新键-值对,也是相同的方法:

dict1[new_key] = new_value

示例代码:

Game = {'Mobagame': ['Dota', 'Lol'], 'FPSgame': 'Crossfire'}
Game['CRPGgame'] = 'Baldur\'s Gate 3' #增加键-值对
print(Game)                            
#输出为{'Mobagame': ['Dota', 'Lol'], 'FPSgame': 'Crossfire', 'CRPGgame': "Baldur's Gate 3"}
Game['FPSgame'] = 'CSGO'              #修改键-值对        
print(Game) 
#输出为{'Mobagame': ['Dota', 'Lol'], 'FPSgame': 'CSGO', 'CRPGgame': "Baldur's Gate 3"}

删除/清空元素

使用del命令可以对字典内的键-值对进行删除:

dict1 = {'Tom': 25, 'Lily': 18, 'Chamber': 35}
del dict1['Lily']     #删除键Lily
print(dict1)          #运行结果为{'Tom': 25, 'Chamber': 35}

使用del命令也可以对整个字典进行删除,但删除后整个字典将会消失,而不是变成空字典:

dict1 = {'Tom': 25, 'Lily': 18, 'Chamber': 35}
del dict1       #对整个字典进行删除
print(dict1)    #会输出错误

4f5bbb5981854390aa3031cc404bbecf.png

使用.pop()方法可以删除指定项,想要将字典清空,可以使用.clear()方法。

具体操作在下方字典方法中。

字典方法

汇总目录

.keys()返回只包含字典键内容的字典视图
.values()返回只包含字典值内容的字典视图
.items()返回一个包含所有字典键-值对的列表
.get()返回一个包含所有字典键-值对的列表,没有对应的键则返回None
.setdefault()查询字典内对应键的值,如果不存在会自动创建该键-值对

.copy()

对字典进行浅复制,如果进行深复制要导入deepcopy模块

.pop()

删除指定键和相对应的值,并返回对应的值
.popitem()删除字典最后一对键-值,并返回该键-值对
.clear()清空字典
.update()一个字典的项来更新另一个字典

.keys()

.keys()方法返回一个只包含字典键内容的字典视图:

dict1 = {'Tom': 25, 'Lily': 18, 'Chamber': 35}
print(dict1.keys())   #运行结果为dict_keys(['Tom', 'Lily', 'Chamber'])

.values()

.values()方法返回一个只包含字典值内容的字典视图:

dict1 = {'Tom': 25, 'Lily': 18, 'Chamber': 35}
print(dict1.values())   #运行结果为dict_values([25, 18, 35])

.items() 

.items()方法返回一个包含所有字典键-值对的列表。

dict1 = {'Tom': 25, 'Lily': 18, 'Chamber': 35}
print(dict1.items())   #运行结果为dict_items([('Tom', 25), ('Lily', 18), ('Chamber', 35)])

在一些老版本Python中该方法可能导致列表中的排列顺序不确定。

.get()

.get()方法可以查询指定键对应的值,如果没有对应的键则返回None。

dict1 = {'Tom': 25, 'Lily': 18, 'Chamber': 35}
print(dict1.get('Tom'))   #运行结果为25
print(dict1.get('Jerry')) #运行结果为None

使用该方法可以大胆地查询字典内的项,不需要担心会返回错误,因为即使不存在也会返回None。

.setdefault()

该方法也可以查询字典内对应键的值,但不同的是,当字典不包含该键/键-值时,会自动创建该键-值对。

dict1 = {'Tom': 25, 'Lily': 18, 'Chamber': 35}
print(dict1.setdefault('Tom'))   #运行结果为25
print(dict1.setdefault('Jerry')) #运行结果为None
print(dict1)                     
#运行结果为{'Tom': 25, 'Lily': 18, 'Chamber': 35, 'Jerry': None}
print(dict1.setdefault('Jeff', 22)) #运行结果为22
print(dict1)  
#运行结果为{'Tom': 25, 'Lily': 18, 'Chamber': 35, 'Jerry': None, 'Jeff': 22}

如果只查询键且字典内不包含该键,返回None,并创建该项,值为None。如果查询键-值且字典内没有该键-值对,返回查询的值,并创建该项。

.copy()

对字典进行浅复制

a = {'a': 123, 'b': [1, 2, 3], 'c':456}
b= a.copy()
b['a'] = 456    
print(a)           #运行结果为{'a': 123, 'b': [1, 2, 3], 'c': 456}
print(b)           #运行结果为{'a': 456, 'b': [1, 2, 3], 'c': 456}
b['b'] = [1, 0, 0]
print(a)           #运行结果为{'a': 456, 'b': [1, 0, 0], 'c': 456}
print(b)           #运行结果为{'a': 456, 'b': [1, 0, 0], 'c': 456}

 从示例可以看出,使用copy进行浅复制之后,对值进行替换,原件不会发生变化;如果是进行值的修改,原件将会随着变化。

如果想生成一个与原字典不相关联的副本,就要进行深复制。此时需要调用copy模块中的深复制函数deepcopy()

from copy import deepcopy
a = {'a': 123, 'b': [1, 2, 3], 'c':456}
b = deepcopy(a)
b['b'] = [0, 0, 0]
print(a)            #运行结果为{'a': 123, 'b': [1, 2, 3], 'c': 456}
print(b)            #运行结果为{'a': 123, 'b': [0, 0, 0], 'c': 456}

.pop()

删除指定键和相对应的值,并返回对应的值。

dict1 = {'Tom': 25, 'Lily': 18, 'Chamber': 35}
print(dict1.pop('Tom'))   #返回值25
print(dict1)              #运行结果为{'Lily': 18, 'Chamber': 35}

.pop()方法和在列表中功能相似,但不存在对应的.append()方法。 

.popitem()

删除字典最后一对键-值,并返回该键-值对。

dict1 = {'Tom': 25, 'Lily': 18, 'Chamber': 35}
print(dict1.popitem())   #返回('Chamber', 35)
print(dict1)             #运行结果为{'Tom': 25, 'Lily': 18}

在一些老版本python中和.items()方法一样可能会导致删除顺序不确定。

.clear()

.clear()方法可以将字典清空。

dict1 = {'Tom': 25, 'Lily': 18, 'Chamber': 35}
dict1.clear()     #清空字典
print(dict1)      #输出结果为{}

.update()

用一个字典的项来更新另一个字典。如果出现键相同的项就覆盖掉。

dict1 = {'Tom': 25, 'Lily': 18, 'Chamber': 35}
dict2 = {'Tom': 23, 'Jeff':30, 'Jerry': 15}
dict1.update(dict2)
print(dict1)     #运行结果为{'Tom': 25, 'Lily': 18, 'Chamber': 35, 'Jeff': 30, 'Jerry': 15}

  • 27
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值