Logo

郎哥编程

Python字典的复制与遍历

2018-11-03 977

本篇介绍Python中字典的复制与遍历。文中会讨论字典的浅复制与深复制的区别,字典的遍历方法和方式。通过本篇的学习,可以达成如下目标。

● 了解字典浅复制与深复制的区别

● 掌握字典遍历的方法和方式


1、字典的复制


Python字典提供了内置函数copy方法,实现对字典的复制操作。字典复制分为浅复制和深复制两种方式。浅复制只是把当前字典内的子对象的引用复制给新字典,当被复制字典的子对象内容改变时,新字典的子对象内容也会改变;深复制把当前字典的全部内容,也包括子对象的内容都完全复制给新字典,被复制字典和新字典是两个独立的数据对象,被复制字典内容的改变不会影响新字典的内容。浅复制用copy方法,深复制用deepcopy方法。

例1:字典的复制例子

#导入copy
import copy
#声明一个字典
adict={'姓名':'Tom','性别':['男','女']}
#浅复制一个字典
bdict=adict.copy()
#深复制一个字典
cdict=copy.deepcopy(adict)
#定义遍历字典的函数
def travel(dict):
    for key,value in dict.items():
        print('%s : %s'%(key,value))
print('进行删除操作')
adict['性别'].remove('女')
travel(adict)
print('copy浅复制(浅拷贝)')
travel(bdict)
print('deepcopy深复制(深拷贝)')
travel(cdict)

例1输出结果如下图所示。

image.png

                                             

在案例代码中,adict字典有‘姓名’和‘性别’两个key,分别对应值‘Tom’和值‘['男','女']’,值‘['男','女']’是一个列表对象。然后将adict字典分别浅复制和深复制给bdict字典和cdict字典。随后又对adict字典的元素进行删除操作,最后分别遍历输出bdict字典和cdict字典。从输出结果可以看出,深复制的cdict字典内容没有改变,浅复制的bdict字典内容和adict字典的内容一致,说明adict字典内容的改变影响到了bdict字典内容,而cdict字典内容不受任何影响。


2、字典的遍历


遍历字典主要是遍历字典的项、键和值。遍历字典的项是把字典包含的所有项都列举出来,遍历字典的键和值是把字典所有的键和值都列举出来。字典提供的items方法可获取字典所有项的集合,在for循环语句中使用items方法可以遍历字典包含的所有项。

例2:遍历字典的项

#声明一个字典
dict1 = {'Name': 'Zara', 'Age': 7,'Sex': '男'};
#遍历字典的键
print("遍历字典的项:")
for item in dict1.items():
    print(item)

例2输出结果如下图所示。

image.png


当程序需要遍历字典的键或值时,可以参考下面的例子代码。

例3:遍历字典的键或值

#声明一个字典
dict1 = {'Name': 'Zara', 'Age': 7,'Sex': '男'};
#遍历字典的键
print("遍历字典的键:")
for key in dict1:
    print(str(key),end=",")
#遍历字典的值
print("")
print("遍历字典的值:")
for value in dict1.values():
print (value,end=",")

例3输出结果如下图所示。

image.png


下面给出了同时遍历字典键和值的例子代码。

例4:同时遍历字典的键和值

#声明一个字典
dict1 = {'Name': 'Zara', 'Age': 7,'Sex': '男'};
#遍历字典的键
print("同时遍历字典的键和值:")
for key,value in dict1.items():
print(key,value);

例4输出结果如下图所示。

image.png


课程小结

(1)复制一个字典对象可以使用copy函数,该函数创建一个新的字典,并将原字典的内容复制给新字典。复制方式分为浅复制和深复制两种方式。浅复制只是把字典中的子对象(如字典中的列表、元组等)的引用复制给新字典,也就是说被复制字典的子对象和新字典的子对象使用同一个内存区域,当被复制字典的子对象内容改变时,新字典的子对象内容也会同时改变。深复制是相对于浅复制来说的,在复制过程中,Python会把原字典完整的内容(包括子对象)复制到新字典中,当被复制字典内容改变时,不会影响到新字典的内容。浅复制可以节省内存空间,如果把被复制字典和新字典当做同一个字典来使用时,推荐使用浅复制。

(2)在for循环语句中使用字典提供的items方法,可以遍历字典中的每个数据项。也可以使用for循环语句中迭代访问字典所有的键或值。


代码在线纠错(通义千问 qwen-max)

支持粘贴多个代码文件,提交后由阿里云通义千问自动分析代码漏洞、语法错误、逻辑问题并给出修改建议。
您已解锁 AI 代码纠错功能,可正常使用!

评论区

登录 后发表评论
暂无评论