![代替VBA!用Python轻松实现Excel编程](https://wfqqreader-1252317822.image.myqcloud.com/cover/254/43738254/b_43738254.jpg)
1.7 字典
我们从小学习语文,都用过字典。在查字典时可以从第1页开始,一页一页地往下找,直到找到为止。这样做明显效率低下,特别是当字的位置比较靠后时。所以在查字典时不应这样做,而是根据目录直接跳到对应的页码,查找关于字的解释。在字典中要查的每个字都是唯一的,每个字都有对应的解释说明。
Python中有字典数据类型。字典中的每个元素都由一个键值对组成,其中键相当于真实字典中的字,它在整个字典中作为字条是唯一的;值相当于字的解释说明。键与值之间用冒号分隔,键值对之间用逗号分隔。整个字典用{}(花括号)包围。
1.7.1 字典的创建
使用“{}”可以直接创建字典。在{}内添加各键值对,键值对之间用逗号分隔,键与值之间用冒号分隔。注意,在整个字典中,键必须是唯一的。
下面使用“{}”创建字典。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/050-1.jpg?sign=1739302553-nqRKOjs1ZtgVmR6p3JWP7tiWjcPPyrtk-0-517f27b42b1de4fd7f2e0171a3a5307a)
使用dict函数创建字典。该函数的参数可以以key=value的形式连续传入键和值,也可以将其他可迭代对象转换为字典,或者使用zip函数生成zip对象,然后将zip对象转换为字典。
下面以key=value的形式输入键和值,并生成字典。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/050-2.jpg?sign=1739302553-TGMUHNGLKunjCLrbsbi3NIfxtaNjLjzZ-0-e44cca039d3fa34c819ca8f34b7b6039)
下面使用dict函数将其他可迭代对象转换为字典,其他可迭代对象包括列表、元组、集合等。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/050-3.jpg?sign=1739302553-HmKK0bvihxN8lztL5xmWIN1w0gip1LAh-0-b4f3f64ec4c62bdc871e8faa9de89de4)
这几种转换得到的结果均为:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/050-4.jpg?sign=1739302553-hHIDA6pLrcmc41HXgwnzPXia12MsQIjl-0-49d3be03c8fa4ebe246d4fc5834c1536)
使用zip函数可以利用两个给定的列表得到zip对象,然后使用dict函数将该zip对象转换为字典。这适合于分别得到键和值序列,然后组装成字典的情况。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/050-5.jpg?sign=1739302553-t4PBeLMOLLnJtg1z0f1QlWcZEcf1TR1B-0-b4ef451931a4b45f55b9624cd81f910d)
使用fromkeys方法可以创建值为空的字典。例如:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/050-6.jpg?sign=1739302553-esbMycgliYDkqpVyuD4cbCUE4EntMn03-0-385cbc341778a6bd933a36f3ca1a3afe)
1.7.2 索引
在创建字典以后,在字典名称后面跟[](方括号),在方括号内输入键的名称,可以获取该键对应的值。下面创建一个字典,通过索引获取名称为name的键对应的值。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/051-1.jpg?sign=1739302553-e4UcUal7T5zQfr4WLdr1zjwcOtPlJWKw-0-17f61e87789f10f7dfc22f331a77548e)
使用字典对象的get方法也可以获得相同的结果。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/051-2.jpg?sign=1739302553-wVQYi1RKMaYBFjsprP2ND2jRs1FF0ieJ-0-d11a98d399193dc5f6c4032ff46c13f8)
使用字典对象的keys方法获取所有键,使用values方法获取所有值。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/051-3.jpg?sign=1739302553-SkBqZa6ewcGFirFNsWSRiyTcOFWVT9Td-0-4a3e6d9443808cebb8fc983fc8c72a9e)
使用字典对象的items方法获取所有键值对。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/051-4.jpg?sign=1739302553-zvm76wXlOaB7nO9WUgPlopb0MRAtsC55-0-cb722677d567f0f1267dfbca324acf49)
使用in或not in运算符判断字典中是否包含或不包含指定的键,如果是则返回True,否则返回False。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/051-5.jpg?sign=1739302553-6GB8LBac04GYN53PWVoW7ZQFy6tzjNdd-0-61785d110d5d3ce489baa7c5f31dcd8c)
字典的长度即字典中键值对的个数。使用len函数获取指定字典的长度。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/051-6.jpg?sign=1739302553-8XQeYp3LaXS8nKlROiw6vLnsq2k7uqzB-0-1b833b3cd57eb0ab6c9a12fbca903217)
1.7.3 字典元素的增删改
在创建字典以后,可以通过索引的方式直接添加键值对或修改指定键对应的值。下面创建一个字典dt记录学生信息。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/051-7.jpg?sign=1739302553-fMhbWMlTli85SllUN92CVzb2aJEIwhPO-0-44a5b06055722f1511aee2af3f599de5)
添加表示学生分数的键值对:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/051-8.jpg?sign=1739302553-KImOcOABOAk9Bk8gBUukPPjYqXCiI9FO-0-cbb93b0435661237ef2a6f084218c536)
修改学生姓名:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/051-9.jpg?sign=1739302553-Qsa4Ad718uWSOy2QuUl64Q0i4OpKXo7E-0-1387889aad81086e4059d0ae7d27e390)
也可以使用字典对象的update方法添加或修改键值对。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/052-1.jpg?sign=1739302553-DJfhoav8R8FSe8JDGo1qJRsaorFNTL5R-0-cd768bd222f03ff05d0f6ee305a92556)
使用del命令删除字典中的键值对。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/052-2.jpg?sign=1739302553-2V2JP3Snn0lMJqXHcIWsnh3cFJBEKyW6-0-dde815146e91b45dffd3c20f7103f4b9)
将指定的键作为函数参数,使用字典对象的pop方法删除指定键值对。该方法返回指定键对应的值。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/052-3.jpg?sign=1739302553-lk4VIK9ZIQIDqRROSrcKCO8gmhou4Vvx-0-5d7dab284528591935aa07352002e19c)
使用字典对象的clear方法清空字典中的所有键值对。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/052-4.jpg?sign=1739302553-dFVGi29o69cfg1yJRFD73OkFqEPpoh68-0-e0eca0dcdadc4c0e2a74c2f195ae8768)
1.7.4 字典数据的格式化输出
当使用print函数输出字典数据时,可以使用format函数指定输出格式。下面创建一个字典。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/052-5.jpg?sign=1739302553-TnD89MZDR0ace8RFC1tNrQor8tH32iAm-0-8d1a8e97731a56f869637d6e9dbddd46)
用“{}”占位,在括号内可以从0开始添加数字,也可以不添加数字。字典数据作为format函数的参数给出。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/052-6.jpg?sign=1739302553-W5i2FppAP1KqgBwXtN0yf0hOmVXKzs4i-0-25a66ed346b961c1935eea3842d20af8)
用“{}”占位,在括号内指定参数名称,format函数的参数使用对应的参数名称并指定字典数据。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/053-1.jpg?sign=1739302553-V51vefLtKyELjvp5spoisW2jeJiIF1N1-0-c6d6832b799dfd81368fdad0c24d685d)
用“{}”占位,在括号内输入键的名称,format函数的参数被指定为字典名称。注意,在字典名称前面添加两个“*”。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/053-2.jpg?sign=1739302553-P86IQVkqgG1ofyqc0w0pTvJn87j6ucnC-0-945cc7a7af55f0078eb8b69fa2fbdc80)
用“{}”占位,在括号内添加字典的索引形式,但是字典名称用0代替。format函数的参数被指定为字典名称。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/053-3.jpg?sign=1739302553-C7ppL1n3hO0auW4RQTEB0E9qObDPk2ka-0-430f57efd3cc86d8faf834275351acf6)