Skip to main content

Python 字典

本来我们来系统的学习什么是字典、创建字典、字典增加、字典修改、字典删除、字典查询、字典取键、字典取值、字典赋值、字典遍历、字典的深拷贝和浅拷贝、字典的常用方法,帮助大家系统学习Python字典的全部知识。

什么是字典?

本节我们来学习字典。那什么是字典呢?字典在Python中是一个无序的数据值集合,这里有个关键字叫做无序。它由一系列键值对组成,每个键值对都是一个唯一的键和对应的值。字典可以通过键来访问其对应的值,类似于列表中通过索引来访问元素。字典的键必须是不可变的,而值可以是任何类型的对象。

前面我们学习的字符串、列表和元组,它们中的元素都是有顺序的,所以你可以对它们使用索引和切片,而字典它是无序的,那么我们为什么还需要使用字典呢?下面我们通过一个例子来更好的理解一下,在水浒传中一共有108将。

水浒传108将

头把交椅就是呼保义宋江,第二把交椅是玉麒麟卢俊义......最后的两个是鼓上骚时迁和金毛犬段景住,那如果我们把这108个英雄好汉写入一个列表如下

heros = ['宋江','卢俊义','.....','时迁','段景柱'] 
heros[12] #鲁智深
heros[102] #孙二娘

那如果在这个列表中,我们要获取一些排名靠中间的,比如说要获取矮脚虎王英,一丈青扈三娘。这样的话你找起来就会非常的不方便,所以针对列表中元素较多的情况下,我们可以使用字典来更好的解决这类问题 。 你会发现在Python中,充分的利用了各种括号,小括号用来表示元组,中括号用来表示列表,而大括号用来表示我们这里的字典。

字典元组列表

在字典中每一个元素都是由key和value组成的,它们中间使用了一个冒号。表示它们是配对关系,一个key对应着一个value。那如果有多个元素呢?多个元素就用逗号来分隔,这里的key翻译为中文就叫做键,而value呢,被翻译为值。键和值这种类型的组合,就叫做键值对,它们是1对1的关系。在这里你可以把Python中的字典和我们现实生活中的字典联系起来,这样可以方便你更好的理解。

字典来了

现在我这里有一个在线版的新华字典,如果现在我想通过拼音来查找大熊课堂中的熊字,我应该这样操作,在这个输入框中我输入拼音熊 然后点击搜索,开始搜索汉字,它就会根据这个拼音熊,搜索到汉字熊。 这里的拼音就相当于key,而汉字就是value。 Python对这里的key和value有什么要求呢?key必须是不可变类型,也就是说它可以是数字,可以是字符串。

字典查找熊字

比如说这里的拼音熊,它就是一个字符串,甚至它还可以是一个元组,但是使用元组的情况非常少见,因为查找起来不方便。那么后面的value呢?这个value就可以是任何数据类型了,此外还需要注意的是这个value可以是多个元素,如上图, 说通过拼音熊,你还可以查找出,这里的熊、雄和兄。

创建字典

本节我们来学习创建字典,我们创建列表,元组基本相同,字典以键值对的形式存储数据,其中键必须是不可变的类型(如字符串、数字或元组),而值可以是任意类型的对象。

语法如下:

dict = {key1:value1, key2:value2, key3:value3, ...}

其中,key1:value1是一个键值对,用冒号分隔,多个键值对之间用逗号分隔。

创建空字典的语法如下:

dict = {}
  1. 直接赋值

创建字典最简单的方法就是直接赋值。我们可以使用花括号()来创建一个空字典,然后使用键值对来添加元素。键值对之间使用冒号(:)分隔,每个键值对之间使用逗号(,)分隔。

heros = {'及时雨':'宋江','玉麒麟':'卢俊义','花和尚':'鲁智深','母夜叉':'孙二娘'}
print(type(heros))

输出结果为:

<class 'dict'>
  1. 创建空字典

如果需要创建一个空字典,可以使用花括号来创建一个没有任何元素的字典。

empty_dict = dict()
print(type(empty_dict))

输出结果为:

<class 'dict'>
  1. 值是多个元素

在字典中,值可以是任何数据类型,包括数字、字符串、列表、元组等。如果值是多个元素,可以使用列表或元组来表示。比如说在水浒传中分为天罡星和地煞星,我们这样定义一个变量heros,键名可以设置为天罡星,在天罡星里有36个人物,你可以使用元组,也可以使用列表,甚至你还可以使用字典来表示 ,地煞星同理。

heros_star = {'天罡星':{'及时雨':'宋江','玉麒麟':'卢俊义','花和尚':'鲁智深'},
'地煞星':{'母夜叉':'孙二娘'}}
  1. 获取字典中的值

如何从字典中取值呢?取值也是一样的,使用一个中括号就可以取值。比如说我要取这里的鲁智深的值,那么我可以这样操作 。

heros = {'及时雨':'宋江','玉麒麟':'卢俊义','花和尚':'鲁智深','母夜叉':'孙二娘'}
print(heros['花和尚'])

输出结果:

鲁智深

这样我们通过键名我们可以取到键值。

那如果对于这种情况呢?在键值中包含着多个元素的,取值的方式也是一样的

heros_star = {'天罡星':{'及时雨':'宋江','玉麒麟':'卢俊义','花和尚':'鲁智深'},
'地煞星':{'母夜叉':'孙二娘'}}
print(heros_star['天罡星']['花和尚'])

输出结果:

鲁智深
  1. 创建字典的时候,不要使用相同的键名

在创建字典的时候,不要使用相同的键名,我们举个例子,在水浒传中有一个真假李逵。真李逵的绰号叫黑旋风,它的值是李逵,还有一个假李逵呢,他也冒充黑旋风,他的值是李鬼。在这个字典中有相同的键名,黑旋风,黑旋风。那么看一下,当我们要取值的时候会发生什么情况?

dict_val = {'黑旋风':'李逵','黑旋风':'李鬼'}
print(dict_val['黑旋风'])

输出结果:

李鬼

结果它获取到了李鬼,而没有获取到前面的李逵,这是因为当你的字典中,如果键名相同的话,它会默认取最后一个,所以说小伙伴们在创建字典的时候,一定不要使用相同的键名。

  1. 键不同,键值相同
dict_val2 = {'及时雨':'宋江','呼保义':'宋江','忠义黑三郎':'宋江'}
print(dict_val2['及时雨'])
print(dict_val2['呼保义'])
print(dict_val2['忠义黑三郎'])

输出结果:

宋江
宋江
宋江

看到输出的结果都是宋江,也就是说在字典中键名是不能相同的,而键值是可以相同的。

下面我们来总结一下字典的特点 :

字典总结

字典增加

本节我们来学习字典增加的方法,可以使用多种方法向字典中添加键值对。我们介绍二种常用方式:使用方括号和update。

  1. 使用方括号[]

方括号[]语法是Python中最常用的添加字典键值对的方法之一。它的语法非常简单,只需要使用字典的键作为索引,然后将要添加的值赋值给它即可。

语法:

dict[key] = value

实例1:方括号给字典增加值

heros = {'及时雨':'宋江','玉麒麟':'卢俊义','花和尚':'鲁智深','母夜叉':'孙二娘'}
heros['豹子头'] = '林冲'
print(heros)

运行结果:

{'及时雨': '宋江', '玉麒麟': '卢俊义', '花和尚': '鲁智深', '母夜叉': '孙二娘', '豹子头': '林冲'}

2.使用update()方法

update()方法可以用于将一个字典中的键值对添加到另一个字典中。它的语法非常简单,只需要将要添加的键值对作为一个字典传递给update()方法即可。

语法:

dict.update({key: value})

实例2:使用update()方法给字典增加值

heros = {'及时雨':'宋江','玉麒麟':'卢俊义','花和尚':'鲁智深','母夜叉':'孙二娘'}
new_dict = {'豹子头': '林冲'}
heros.update(new_dict) # 使用update()方法向字典中添加键值对
print(heros)

运行结果:

{'及时雨': '宋江', '玉麒麟': '卢俊义', '花和尚': '鲁智深', '母夜叉': '孙二娘', '豹子头': '林冲'}

字典修改

本节我们学习Python字典修改方法,包括修改键对应的值、新增键值对。

  1. 修改键对应的值

要修改字典中某个键对应的值,可以直接通过键访问字典,并将其对应的值赋值给一个新的变量。比如说这里及时雨宋江,我把他改为及时雨宋公明。

heros = {'及时雨':'宋江','玉麒麟':'卢俊义','花和尚':'鲁智深','母夜叉':'孙二娘'}
heros['及时雨'] = '宋公明'
print(heros)

输出结果为:

{'及时雨': '宋公明', '玉麒麟': '卢俊义', '花和尚': '鲁智深', '母夜叉': '孙二娘'}
  1. 使用update方法对字典进行修改

语法:

dict.update({key: value})

其中,dict是字典名称,key是要新增的键,value是对应的值。

如果你要被添加的字典中,包含着原来字典中的键名和键值、字典的键名但键值不同,不包含键名和键值,这时会怎样呢?假如说我在这里再添加一个

dict_val = {'及时雨':'宋江','入云龙':'公孙胜','花和尚':'鲁达'}
heros = {'及时雨':'宋江','玉麒麟':'卢俊义','花和尚':'鲁智深','母夜叉':'孙二娘'}
dict_val = {'及时雨':'宋江','入云龙':'公孙胜','花和尚':'鲁达'}
heros.update(dict_val)
print(heros)

输出结果为:

{'及时雨': '宋江', '玉麒麟': '卢俊义', '花和尚': '鲁达', '母夜叉': '孙二娘', '入云龙': '公孙胜'}

通过结果我们可以得出具有相同的键名,那么后一个会覆盖前一个,鲁达在后面会覆盖原来的鲁智深,相同键名和键值不会添加进来。

字典删除

本节我们学习字典的删除,在 Python 字典中,有多种方法可以删除键值对或清空整个字典。本文将介绍四种方法:del、pop、popitem 和 clear。并给大家总结表格如下

方法作用示例
del删除字典中指定的键值对my_dict = {'a':1, 'b':2} del my_dict['a']
pop删除字典中指定的键值对并返回该键对应的值my_dict = {'a':1, 'b':2} my_dict.pop('a')
popitem随机删除字典中的一个键值对并返回该键值对(假设字典中有键值对{'a':1, 'b':2}) my_dict.popitem()返回值可能是('a', 1)或者('b', 2)
clear清空字典中所有的键值对my_dict = {'a':1, 'b':2} my_dict.clear()
  1. del 方法

del 方法可以删除字典中任意一个键值对,其语法如下:

del dict[key]

其中,dict 表示要删除键值对的字典,key 表示要删除的键。如果字典中不存在该键,则会报错。

实例1:删除一个元素

heros = {'及时雨':'宋江','玉麒麟':'卢俊义','花和尚':'鲁智深','母夜叉':'孙二娘'}
del heros['及时雨']
print(heros)

输出结果:

{'玉麒麟': '卢俊义', '花和尚': '鲁智深', '母夜叉': '孙二娘'}

在上面的例子中,我使用 del 方法删除了字典中的一个键值对'及时雨':'宋江' ,最后输出字典的内容。

实例2:删除整个字典

heros = {'及时雨':'宋江','玉麒麟':'卢俊义','花和尚':'鲁智深','母夜叉':'孙二娘'}
del heros
print(heros)

输出结果:

NameError: name 'heros' is not defined

这里提示我heros is not defined,那是因为我们已经把这个hero删除了,这个字典不存在了,所以你在打印的时候就会提示heros is not defined,这就说明你把整个字典删除成功了。

  1. pop 方法

pop 方法可以删除指定键的键值对,并返回该键对应的值。

语法如下:

dict.pop(key[, default])

dict 表示要删除键值对的字典,key 表示要删除的键。如果该键不存在,可以提供一个默认值 default,如果不提供则会报错。

实例3:pop方法根据键名删除

heros = {'及时雨':'宋江','玉麒麟':'卢俊义','花和尚':'鲁智深','母夜叉':'孙二娘'}
heros.pop('花和尚')
print(heros)

输出结果:

{'及时雨': '宋江', '玉麒麟': '卢俊义', '母夜叉': '孙二娘'}

那如果你删除的键名不存在呢?比如说我要删除和尚这个键名,在我们的字典中是不存在的,那么会产生怎样的结果呢?

keyError

这里就提示了错误KeyErrors,键名错误,因为这个和尚不存在,这种情况pop是无法删除的

3.popitem 方法

popitem 方法可以删除字典中删除最后一个键值对,并以元组(key, value)的形式返回被删除的键值对。

语法如下:

dict.popitem()

实例4:popitem 方法删除字典最后一个

heros = {'及时雨':'宋江','玉麒麟':'卢俊义','花和尚':'鲁智深','母夜叉':'孙二娘'}
item1 = heros.popitem()
item2 = heros.popitem()
print(item1)
print(item2)
print(heros)

输出结果:

('母夜叉', '孙二娘')
('花和尚', '鲁智深')
{'及时雨': '宋江', '玉麒麟': '卢俊义'}
  1. clear方法

clear 方法可以清空整个字典,其语法如下:

dict.clear()

该方法不需要任何参数,它会删除字典中的所有键值对,使字典变为空字典。

下面是一个实例:

heros = {'及时雨':'宋江','玉麒麟':'卢俊义','花和尚':'鲁智深','母夜叉':'孙二娘'}
heros.clear()
print(heros)

输出结果:

{}

使用 clear 方法清空了整个字典,最后输出字典的内容为空字典。

作业

作业一:使用 del 方法删除字典中的一个键值对,键为 'hobby',并输出删除后的字典。

dict1 = {'name': 'Andy', 'hobby': 'basketball', 'gender': 'male'}
  1. 使用 pop 方法删除字典中的一个键值对,键为 'hobby',并输出返回的值和删除后的字典。
dict1 = {'name': 'Andy', 'hobby': 'basketball', 'gender': 'male'}
  1. 使用 popitem 方法删除字典中的一个键值对,并输出返回的元组和删除后的字典。
dict1 = {'name': 'Andy', 'hobby': 'basketball', 'gender': 'male'}
  1. 使用 clear 方法清空字典,并输出清空后的字典。
dict1 = {'name': 'Andy', 'hobby': 'basketball', 'gender': 'male'}

获得作业答案请联系本笔记的配套视频:Python零基础入门动画课【全集】

字典查询

本节我们来学习字典的查询,在字典中,我们可以使用get方法和in关键字进行查询,判断某个键是否在字典中存在。

  1. in语法

in语法用于判断一个键是否在字典中存在。

语法如下:

key in dict

其中,key表示需要查询的键的名称,dict表示需要查询的字典。如果该键存在于字典中,则返回True,否则返回False。

实例

实例1:判断键是否存在于字典中

heros = {'及时雨':'宋江','玉麒麟':'卢俊义','花和尚':'鲁智深','母夜叉':'孙二娘'}
if '及时雨' in heros:
print('该元素在字典中')
else:
print('该元素不在字典中')

输出结果为:

该元素在字典中

那假如说我不用键名,我用那个键值呢?这里有改为宋江,试一下根据值来查询。

heros = {'及时雨':'宋江','玉麒麟':'卢俊义','花和尚':'鲁智深','母夜叉':'孙二娘'}
if '宋江' in heros:
print('该元素在字典中')
else:
print('该元素不在字典中')

输出结果为:

该元素不在字典中

该元素不在字典中,所以说小伙伴们需要注意的是,这里是根据键名,而不是键值来进行查找的。

实例2:判断键是否不存在于字典中

heros = {'及时雨':'宋江','玉麒麟':'卢俊义','花和尚':'鲁智深','母夜叉':'孙二娘'}
if '行者' not in heros:
print('该元素不在字典中')
else:
print('该元素在字典中')

输出结果为:

该元素不在字典中
  1. get查询方法

通过键来查询字典的值。

语法如下:

dict.get(key, default=None)

dict是要查询的字典,key是要查询的键值,default是可选参数,表示如果键不存在时返回的默认值。如果不提供默认值,则会返回None。

实例3:get方法查询字典的值

dict1 = {'name': 'andy', 'age': 18, 'gender': 'male'}
print(dict1.get('name')) # 根据键来查询值
print(dict1.get('height')) # 查询不存在的键,返回None
print(dict1.get('height', 170)) # 查询不存在的键,并提供默认值

输出结果:

andy
None
170

在上面的示例中,我们定义了一个字典dict1,然后使用get()方法来查询键name和键height对应的值。对于存在的键name,方法返回对应的值Alice;对于不存在的键height,方法返回None;对于不存在的键height,我们提供了一个默认值170,这时方法返回默认值。

字典取键

本节我们来介绍一下字典的常用操作取键,字典取键我们用keys方法,keys()方法获取所有键的列表。

语法

Python字典keys()方法的语法如下:

dict.keys()

dict表示字典对象,keys()表示调用字典对象的keys方法,返回值是一个包含字典中所有键的列表。

实例

实例1:keys()方法获取所有键的列表

heros = {'及时雨':'宋江','玉麒麟':'卢俊义','花和尚':'鲁智深','母夜叉':'孙二娘'}
keys = heros.keys()
print(keys)

输出结果为:

dict_keys(['及时雨', '玉麒麟', '花和尚', '母夜叉'])

结果返回的是一个dict_keys这个函数,函数里面有一个列表,我们能否直接从它取值呢?我们列表的方式来取值。

heros = {'及时雨':'宋江','玉麒麟':'卢俊义','花和尚':'鲁智深','母夜叉':'孙二娘'}
keys = heros.keys()
print(keys)
print(keys[0]) #取值

输出结果为:

dict_keys(['及时雨', '玉麒麟', '花和尚', '母夜叉'])
TypeError: 'dict_keys' object is not subscriptable

这里就抛出了一个错误TypeError类型错误,说明它是不允许使用取值的,这里的dict keys,它是一个可迭代对象,可迭代对象的概念我们后面再来介绍,这里你只需要知道它不能够直接取值,那么如果要取值呢,可以把它转化为列表,转化为列表以后,你就可以对它取值了。

heros = {'及时雨':'宋江','玉麒麟':'卢俊义','花和尚':'鲁智深','母夜叉':'孙二娘'}
keys = heros.keys()
print(keys)
print(list(keys))
for key in keys:
print(key)

输出结果:

dict_keys(['及时雨', '玉麒麟', '花和尚', '母夜叉'])
['及时雨', '玉麒麟', '花和尚', '母夜叉']
及时雨
玉麒麟
花和尚
母夜叉

字典取值

在字典中取值时,有两种方法:使用[]符号和get()方法。下面分别介绍这两种方法的具体语法和参数:

  1. 使用[]符号

使用[]符号可以获取字典中指定键的值。

语法为:

字典名[键]

其中,字典名表示要获取值的字典名称,键表示要获取的键名。如果键名不存在,会抛出KeyError异常。

实例1:[]符号通过键获取值

heros = {'及时雨':'宋江','玉麒麟':'卢俊义','花和尚':'鲁智深','母夜叉':'孙二娘'}
print(heros['及时雨'])
print(heros['玉麒麟'])
print(heros['花和尚'])

输出结果:

宋江
卢俊义
鲁智深
  1. 使用values()方法获取所有值

values()方法返回字典中所有值的列表,返回的列表中的值是无序的。

语法如下:

dict.values()

实例2:使用value方法获取列表的值

heros = {'及时雨':'宋江','玉麒麟':'卢俊义','花和尚':'鲁智深','母夜叉':'孙二娘'}
values = heros.values()
print(values)

上述代码将输出:

dict_values(['宋江', '卢俊义', '鲁智深', '孙二娘'])

可以看到,values()方法返回了一个dict_values类型的列表,其中包含了字典中所有的值。它也是一个可迭代的对象,你不能够直接取值,可以通过转化为列表的方式来取值。

heros = {'及时雨':'宋江','玉麒麟':'卢俊义','花和尚':'鲁智深','母夜叉':'孙二娘'}
values = heros.values()
print(list(values))

上述代码将输出:

['宋江', '卢俊义', '鲁智深', '孙二娘']
  1. 使用items()方法获取所有键值

items()方法是Python字典中的一个内置方法,用于返回一个包含字典所有(键,值)元组的列表。这个方法可以让我们在循环中同时访问字典的键和值,特别是在需要对字典进行迭代时,非常有用。

items()方法的语法如下:

dict.items()

dict是指定字典的名称。

items()方法不需要任何参数,它返回的是一个包含所有(键,值)元组的列表。这个列表中的每个元素都是一个元组,其中包含一个键和一个值。

实例3:使用items()方法获取所有键值对

heros = {'及时雨':'宋江','玉麒麟':'卢俊义','花和尚':'鲁智深','母夜叉':'孙二娘'}
items = heros.items()
print(items)
print(list(items))

输出结果:

dict_items([('及时雨', '宋江'), ('玉麒麟', '卢俊义'), ('花和尚', '鲁智深'), ('母夜叉', '孙二娘')])
[('及时雨', '宋江'), ('玉麒麟', '卢俊义'), ('花和尚', '鲁智深'), ('母夜叉', '孙二娘')]

通过items方法,我们可以获取字典中的键值对,结果仍然是一个可迭代对象,那么我要获取它的值呢,转化为列表,值得注意的是,列表中的每一个元素都是一个元组。

那假如说我要获取第1个及时雨宋江,取第1个元素0就获取到了及时雨宋江,这里就获取了一个元组及时雨和宋江,在前面我们学习过元组的拆包,此时我们就可以使用元组的拆包来解决这个问题,第1个赋值为key,第2个赋值为value。

heros = {'及时雨':'宋江','玉麒麟':'卢俊义','花和尚':'鲁智深','母夜叉':'孙二娘'}
items = heros.items()
key,value = list(items)[0]
print(key)
print(value)

输出结果:

及时雨
宋江

字典复制

本节我们来介绍一下字典的常用操作复制,当我们需要在程序中对字典进行操作时,有时候需要对字典进行复制,以避免对原字典造成影响。本节将重点介绍字典复制方法copy()。

copy()方法语法如下:

new_dict = dict.copy()

dict代表要被复制的字典,new_dict代表复制后的新字典。copy()方法不接受任何参数。

实例

实例1:复制字典

heros = {'及时雨':'宋江','玉麒麟':'卢俊义','花和尚':'鲁智深','母夜叉':'孙二娘'}
heros_copy = heros.copy()
print("heros: ", heros)
print("heros_copy: ", heros_copy)

运行结果:

heros:  {'及时雨': '宋江', '玉麒麟': '卢俊义', '花和尚': '鲁智深', '母夜叉': '孙二娘'}
heros_copy: {'及时雨': '宋江', '玉麒麟': '卢俊义', '花和尚': '鲁智深', '母夜叉': '孙二娘'}

实例2:修改复制后的字典

heros = {'及时雨':'宋江','玉麒麟':'卢俊义','花和尚':'鲁智深','母夜叉':'孙二娘'}
heros_copy = heros.copy()
heros.pop('及时雨')
print("heros: ", heros)
print("heros_copy: ", heros_copy)

运行结果:

heros:  {'玉麒麟': '卢俊义', '花和尚': '鲁智深', '母夜叉': '孙二娘'}
heros_copy: {'及时雨': '宋江', '玉麒麟': '卢俊义', '花和尚': '鲁智深', '母夜叉': '孙二娘'}

从结果中可以看出,修改原字典不会影响复制后的字典的内容。

例3:嵌套字典复制

dict1 = {'name': 'Andy', 'age': 18, 'info': {'gender': 'male', 'hobby': 'basketball'}}
dict2 = dict1.copy()
dict2['info']['hobby'] = 'football'
print("dict1: ", dict1)
print("dict2: ", dict2)

运行结果:

dict1:  {'name': 'Andy', 'age': 18, 'info': {'gender': 'male', 'hobby': 'football'}}
dict2: {'name': 'Andy', 'age': 18, 'info': {'gender': 'male', 'hobby': 'football'}}

由于是字典嵌套,从结果中可以看出,这个实例是浅拷贝,后面小节我们在单独讲解深拷贝和浅拷贝。

字典遍历

本节我们来学习字典遍历,在处理字典数据时,常常需要对字典进行遍历操作。Python提供了4种字典遍历方式:遍历key、遍历value、遍历item以及同时遍历key和value。

  1. 遍历key

遍历字典的key可以使用for循环结合字典的keys()方法实现,

语法如下:

for key in dict.keys():
# 进行相应操作

其中,dict代表要遍历的字典对象,key表示当前遍历到的key值。

实例1:使用for循环遍历key

heros = {'及时雨':'宋江','玉麒麟':'卢俊义','花和尚':'鲁智深','母夜叉':'孙二娘'}
keys = heros.keys()
for key in keys:
print(key)

输出结果为:

及时雨
玉麒麟
花和尚
母夜叉
  1. 遍历value

遍历字典的value可以使用for循环结合字典的values()方法实现,语法如下:

for value in dict.values():
# 进行相应操作

其中,dict代表要遍历的字典对象,value表示当前遍历到的value值。

实例2:使用for循环遍历字典的值

heros = {'及时雨':'宋江','玉麒麟':'卢俊义','花和尚':'鲁智深','母夜叉':'孙二娘'}
values = heros.values()
for value in values:
print(value)

输出结果为:

宋江
卢俊义
鲁智深
孙二娘
  1. 遍历item

遍历字典的item可以使用for循环结合字典的items()方法实现,语法如下:

for item in dict.items():
# 进行相应操作

其中,dict代表要遍历的字典对象,key表示当前遍历到的key值,value表示当前遍历到的value值。

实例3:使用for循环遍历字典得到键值对

heros = {'及时雨':'宋江','玉麒麟':'卢俊义','花和尚':'鲁智深','母夜叉':'孙二娘'}
items = heros.items()
print(items)
for item in items:
print(item)

输出结果为:

dict_items([('及时雨', '宋江'), ('玉麒麟', '卢俊义'), ('花和尚', '鲁智深'), ('母夜叉', '孙二娘')])
('及时雨', '宋江')
('玉麒麟', '卢俊义')
('花和尚', '鲁智深')
('母夜叉', '孙二娘')
  1. 遍历key-value

同时遍历字典的key和value可以使用for循环结合字典的items()方法实现,语法如下:

for key, value in dict:
# 进行相应操作

其中,dict代表要遍历的字典对象,key表示当前遍历到的key值。在这种情况下,for循环默认会遍历字典的key值。如果需要同时遍历字典的key和value,可以在循环体内使用字典的key-value方式访问相应的值。

实例4:用for循环同时遍历字典的key和value

heros = {'及时雨':'宋江','玉麒麟':'卢俊义','花和尚':'鲁智深','母夜叉':'孙二娘'}
items = heros.items()
print(items)
for key,value in items:
print(f'{key}->{value}')

输出结果为:

dict_items([('及时雨', '宋江'), ('玉麒麟', '卢俊义'), ('花和尚', '鲁智深'), ('母夜叉', '孙二娘')])
及时雨->宋江
玉麒麟->卢俊义
花和尚->鲁智深
母夜叉->孙二娘

作业

作业一:统计一段英文文本中每个单词出现的次数,并输出结果。例如,对于文本"this is da xiong ke tang ", 统计结果为

{"this": 1, "is": 1, "da": 1, "xiong": 1, "ke": 1, "tang": 1}

作业二:将一个字典中的key和value互换位置,并输出结果。例如,对于字典 {"a": 1, "b": 2, "c": 3},互换后结果为{1: "a", 2: "b", 3: "c"}

作业三:将一个字典中的value值大于5的key值输出来。例如,对于字典{"a": 1, "b": 6, "c": 3, "d": 8},输出结果为["b", "d"]

作业四:将两个字典合并为一个字典,并输出结果。如果有重复的key值,以第二个字典中的value值为准。例如,对于字典{"a": 1, "b": 2}和{"c": 3, "b": 4},合并后结果为{"a": 1, "b": 4, "c": 3}

作业五:将一个字典中的key值按照字母顺序排序,并输出结果。例如,对于字典{"c": 3, "a": 1, "b": 2},排序后结果为["a", "b", "c"]

获得作业答案请联系本笔记的配套视频:Python零基础入门动画课【全集】

字典深拷贝和浅拷贝

本节我们来学习Python字典深拷贝和浅拷贝。当我们需要对字典进行复制时,有两种方式:深拷贝和浅拷贝。本篇文章将详细介绍这两种拷贝方式的区别,以及如何在Python中进行深拷贝和浅拷贝。

  1. 浅拷贝

浅拷贝是将原始字典的引用复制给新字典,这意味着新字典中的键值对还是引用原始字典中的对象。可以使用copy()方法进行浅拷贝。

实例1:浅拷贝实例

dict1 = {'name': 'Andy', 'age': 18, "hobbies": ["reading", "basketball"]}
dict2 = dict1.copy()
dict2["name"] = "大熊"
dict2['hobbies'].append("dancing")

print("dict1: ", dict1)
print("dict2: ", dict2)

输出结果:

dict1:  {'name': 'Andy', 'age': 18, 'hobbies': ['reading', 'basketball', 'dancing']}
dict2: {'name': '大熊', 'age': 18, 'hobbies': ['reading', 'basketball', 'dancing']}

如上所示,当我们使用copy()方法进行浅拷贝时,新字典dict2中的"hobbies"键值对引用的是原始字典中的"hobbies"列表对象。所以在修改dict2中"hobbies"列表时,原始字典中的"hobbies"列表也会被修改。

  1. 深拷贝

深拷贝是将原始字典中的键值对中的对象复制到新字典中。这意味着新字典中的对象是原始字典中对象的副本,而不是引用。可以使用copy模块的deepcopy()方法进行深拷贝。

import copy
dict1 = {'name': 'Andy', 'age': 18, "hobbies": ["reading", "basketball"]}
dict2 = copy.deepcopy(dict1)
dict2["name"] = "大熊"
dict2['hobbies'].append("dancing")

print("dict1: ", dict1)
print("dict2: ", dict2)

输出结果:

dict1:  {'name': 'Andy', 'age': 18, 'hobbies': ['reading', 'basketball']}
dict2: {'name': '大熊', 'age': 18, 'hobbies': ['reading', 'basketball', 'dancing']}

如上所示,当我们使用deepcopy()方法进行深拷贝时,新字典dict2中的"hobbies"键值对引用的是原始字典中的"hobbies"列表对象的副本。所以在修改dict2中"hobbies"列表时,原始字典中的"hobbies"列表不会被修改。

Python字典拷贝的注意事项

  • 当对原始字典中的对象进行更改时,浅拷贝引用的对象也会被更改,而深拷贝不会。
  • 字典中的每个键和值都必须是可哈希的(即不可变的),否则在深拷贝时会引发TypeError。

字典常用方法

本节我们来介绍一下字典的常用方法汇总,字典也是Python中最常用的数据类型,所以Python提供了非常多的操作字典的方法。下面按照使用程度的高低给大家做了一个字典常用方法的表格,并且每个方法带超链接,点击方法名字,都有对各个方法的详细介绍。

方法名称方法描述使用程度
keys()返回字典中所有的键非常常用
values()返回字典中所有的值非常常用
items()返回字典中所有的键值对非常常用
get(key[, default])返回指定键的值,如果键不存在则返回默认值非常常用
update([other])将其他字典或键值对更新到字典中非常常用
pop(key[, default])删除指定键并返回对应值,若键不存在则返回默认值常用
popitem()随机删除并返回字典中的一个键值对常用
clear()删除字典中所有元素常用
fromkeys(seq[, value])创建一个新字典,以序列seq中的元素作为键,值为value偶尔使用
setdefault(key[, default])返回指定键的值,若键不存在则插入指定键及默认值偶尔使用
copy()返回字典的浅拷贝偶尔使用
len()返回字典中键值对的数量偶尔使用