![代替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=1739590665-cCreEDhOs2nOKA50PtU3l3cbPkvZasP3-0-9d41608dee9c1d6d20eef25a78cffc81)
使用dict函数创建字典。该函数的参数可以以key=value的形式连续传入键和值,也可以将其他可迭代对象转换为字典,或者使用zip函数生成zip对象,然后将zip对象转换为字典。
下面以key=value的形式输入键和值,并生成字典。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/050-2.jpg?sign=1739590665-hNWV8FP87JTgYepXr1KRXZ9qN9P0zn5a-0-4309f77762707c19ddb5533e30c20085)
下面使用dict函数将其他可迭代对象转换为字典,其他可迭代对象包括列表、元组、集合等。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/050-3.jpg?sign=1739590665-OAvhDfHmikj3g4BjwtSLpkfKBqEwaOlo-0-6d05d069272315e4f4a38788ad681d69)
这几种转换得到的结果均为:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/050-4.jpg?sign=1739590665-RtuCT9UtQuEX4lu6StC908AJZJ4Tv3wZ-0-1aa788ca7c0dd69d8135a8412af06197)
使用zip函数可以利用两个给定的列表得到zip对象,然后使用dict函数将该zip对象转换为字典。这适合于分别得到键和值序列,然后组装成字典的情况。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/050-5.jpg?sign=1739590665-CvbHiCQbtqOUSekqBQhoazx9vWFGDWm0-0-46d04fcc1638ac9fd2d291081d1fd292)
使用fromkeys方法可以创建值为空的字典。例如:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/050-6.jpg?sign=1739590665-BkZXyr40PArjz12maE8Oga8f7lcWvna9-0-1ce3f197b7c3f08d7eefd3d213a36ed8)
1.7.2 索引
在创建字典以后,在字典名称后面跟[](方括号),在方括号内输入键的名称,可以获取该键对应的值。下面创建一个字典,通过索引获取名称为name的键对应的值。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/051-1.jpg?sign=1739590665-Qofp6dF2KkHT6yD6Sd0iPevAxHA4pgXX-0-2dc966695fa95255fc172cdc454d19da)
使用字典对象的get方法也可以获得相同的结果。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/051-2.jpg?sign=1739590665-dTyYgcXYern3ZDkUpYfrBLMmcU7qQMsv-0-c1bbac88a2483a08902fc426f1f2df35)
使用字典对象的keys方法获取所有键,使用values方法获取所有值。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/051-3.jpg?sign=1739590665-zjRMRUHrMfNPlZJOUYSqLhFrCDE9F9i9-0-36aa319f9c651d3582b90ceb7d613c17)
使用字典对象的items方法获取所有键值对。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/051-4.jpg?sign=1739590665-EisMiZT5jYdZONrkGHR6bI3gziFNy3aF-0-113c1ca233a81674360c729c50b4b11e)
使用in或not in运算符判断字典中是否包含或不包含指定的键,如果是则返回True,否则返回False。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/051-5.jpg?sign=1739590665-bHgjB5qnmHsDwogKnTvPdPkTuUbHNfUR-0-f78ca41e5bf28ecb9a59f8503fee1b3d)
字典的长度即字典中键值对的个数。使用len函数获取指定字典的长度。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/051-6.jpg?sign=1739590665-erHdQwoVKcYtf8yutJ7kG7TUKgSynwnV-0-b19adbc3419377f04926e5162dd9e8a6)
1.7.3 字典元素的增删改
在创建字典以后,可以通过索引的方式直接添加键值对或修改指定键对应的值。下面创建一个字典dt记录学生信息。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/051-7.jpg?sign=1739590665-EcG3vYNU3HzEp3pjGCur5sIRx4Kkogir-0-448d6c779bae0638ac8fee1fcaac8276)
添加表示学生分数的键值对:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/051-8.jpg?sign=1739590665-uaOkeYQdzBePDrv82hNQNjmiP33ZqfXW-0-d81dc29b30d96ea9af5c0a4021e60ab5)
修改学生姓名:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/051-9.jpg?sign=1739590665-C5cIW5E0rydiKT2x6VsAGjPl2cAkr7AQ-0-9d31612b62f61c2be1d00b2004aa27c2)
也可以使用字典对象的update方法添加或修改键值对。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/052-1.jpg?sign=1739590665-rAnAvFrGlFM5OJapg9SBBbM5FemXaX4Z-0-4a536ab038e1874e17c0d5511aadc8ef)
使用del命令删除字典中的键值对。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/052-2.jpg?sign=1739590665-QbyEsHcKzVcfX7SPulz3gd4aCr7qYvBS-0-c06010805e7e2dd9675b39dc67b94604)
将指定的键作为函数参数,使用字典对象的pop方法删除指定键值对。该方法返回指定键对应的值。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/052-3.jpg?sign=1739590665-4g9AgzC7v5l3xIOXXDj7TiRJ1c9ZJiyi-0-2aa488edee76d9222784e40dbf6a9c59)
使用字典对象的clear方法清空字典中的所有键值对。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/052-4.jpg?sign=1739590665-ZVykwZrSd4gl1ncMY6gpfuNmY7SSdtgb-0-a674120282419effc6ce5c8df42a0505)
1.7.4 字典数据的格式化输出
当使用print函数输出字典数据时,可以使用format函数指定输出格式。下面创建一个字典。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/052-5.jpg?sign=1739590665-v9b6N4nXd6tsVzIH8U6m15nebLBGX9ef-0-492d63e093026234956876ef84480d11)
用“{}”占位,在括号内可以从0开始添加数字,也可以不添加数字。字典数据作为format函数的参数给出。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/052-6.jpg?sign=1739590665-GWrFPHRYAZVD7TEzmLGx5ZSetx6j7xid-0-45fc340fe29d8088c94bcc0328dbb724)
用“{}”占位,在括号内指定参数名称,format函数的参数使用对应的参数名称并指定字典数据。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/053-1.jpg?sign=1739590665-DBTQK9v4D0p6VruK22oYlUJipwrtPVnQ-0-e82b58326ce87af1db8a9b89c4654611)
用“{}”占位,在括号内输入键的名称,format函数的参数被指定为字典名称。注意,在字典名称前面添加两个“*”。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/053-2.jpg?sign=1739590665-2fbGQviaSfPjjE5OygUjGNz3YrWvTnf8-0-f276ad678a5ebf99a4bc4f1365956957)
用“{}”占位,在括号内添加字典的索引形式,但是字典名称用0代替。format函数的参数被指定为字典名称。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/053-3.jpg?sign=1739590665-FPRQQ0F0lsMnp2TCN008eEQQYY9avNL8-0-c4cb1474550caba27df49b30bfa89108)