Excel VBA和Python双语对照学习
我们从小学习语文,都用过字典。查字典时可以从第一页开始,一页一页地往下找,直到找到为止。这样做明显效率低下,特别是字的位置比较靠后的时候。所以查字典时不这样做,而是根据目录直接跳到对应的页码查找关于字的解释。字典中要查的每个字是唯一的,每个字都有对应的解释说明。
字典中每个元素由一个键值对组成,其中键相当于真实字典中的字,它在整个字典中作为字条是唯一的;值相当于字的解释说明。Python中有字典数据类型,Excel VBA中则需要引外部库创建字典对象。
点这里看视频课程
【Excel VBA】
Excel VBA中没有字典数据类型,也无法直接创建字典对象,而需要通过引用第三方库创建字典对象并通过对该对象编程来实现字典相关的操作。
在Excel VBA中创建字典对象有前期绑定与后期绑定两种方式。
用后期绑定创建字典对象,首先创建一个Object类型的变量,然后用CreateObject函数创建字典对象并用该变量进行引用。使用类似下面的代码创建字典对象dicT。
Dim dicT As Object
Set dicT = CreateObject("Scripting.Dictionary")
然后就可以使用字典对象的属性和方法进行编程,比如向字典对象添加键值对。示例文件的存放路径为Samples\ch08\Excel VBA\创建字典.xlsm。
Sub Test()Dim dicT As ObjectSet dicT = CreateObject("Scripting.Dictionary")'向字典对象添加键值对dicT.Add "No001", "刘丹"dicT.Add "No002", "朱晓琳"dicT.Add "No003", "马忠"Debug.Print dicT.Count '3,字典的长度,即键值对的个数
End Sub
用前期绑定创建字典对象,需要按照下面的步骤进行操作:
在Excel主界面的“开发工具”功能面板中单击“Visual Basic”按钮,打开Excel的VBA开发环境。
在“工具”菜单中单击”引用”选项,打开“引用”对话框,如图所示。
在“可使用的引用”列表框中选择“Microsoft Scripting Runtime”核选框。
单击“确定”按钮。
添加相关库的引用后,使用类似下面的代码创建字典对象dicT。
Dim dicT As Scripting.Dictionary
Set dicT=New Scripting.Dictionary
或者
Dim dicT As New Scripting.Dictionary
然后就可以使用字典对象的属性和方法进行编程,比如向字典对象添加键值对。示例文件的存放路径为Samples\ch08\Excel VBA\创建字典.xlsm。
Sub Test2()Dim dicT As Scripting.DictionarySet dicT = New Scripting.Dictionary'向字典对象添加键值对dicT.Add "No001", "刘丹"dicT.Add "No002", "朱晓琳"dicT.Add "No003", "马忠"Debug.Print dicT.Count '3
End Sub
【Python】
Python中有字典数据类型。字典的键与值之间用冒号分隔,键值对之间用逗号分隔。整个字典用大括号({})包围。注意,在整个字典中,键必须是唯一的。
下面用{}创建字典:
>>> dt={} #空字典
>>> dt
{}
>>> dt={'No001':'刘丹', 'No002':'朱晓琳', 'No003':'马忠'}
>>> dt
{'No001': '刘丹', 'No002': '朱晓琳', 'No003': '马忠'}
>>> len(dt) #字典的长度
3
使用dict函数可以创建字典。该函数的参数,可以以key=value的形式连续传入键和值,也可以将其他可迭代对象转换为字典,或者zip函数生成zip对象,然后将zip对象转换为字典。
下面用key=value的形式输入键和值,并生成字典。
>>> dt=dict(grade=5, clas=2, id="s195201", name="LinXi")
>>> dt
{'grade': 5, 'clas': 2, 'id': 's195201', 'name': 'LinXi'}
下面用dict函数将其他可迭代对象转换为字典,其他可迭代对象包括列表、元组、集合等。
>>> dt=dict([("grade",5), ("clas",2), ("id","s195201"), ("name", "LinXi")])
>>> dt=dict((("grade",5), ("clas",2), ("id","s195201"), ("name", "LinXi")))
>>> dt=dict([["grade",5], ["clas",2], ["id","s195201"], ["name", "LinXi"]])
>>> dt=dict((["grade",5], ["clas",2], ["id","s195201"], ["name", "LinXi"]))
>>> dt=dict({("grade",5), ("clas",2), ("id","s195201"), ("name", "LinXi")})
这几种转换得到的结果均为:
>>> dt
{'grade': 5, 'clas': 2, 'id': 's195201', 'name': 'LinXi'}
使用zip函数可以利用两个给定的列表得到zip对象,然后用dict函数将该zip对象转换为字典。这适合于分别得到键和值序列,然后组装成字典的情况。
>>> k=["grade", "clas", "id", "name"]
>>> v=[5, 2, "s195201", "LinXi"]
>>> p=zip(k,v)
>>> dt=dict(p)
>>> dt
{'grade': 5, 'clas': 2, ' id': 's195201', 'name': 'LinXi'}
使用fromkeys方法可以创建值为空的字典,例如:
>>> dt=dict.fromkeys(["grade", "clas", "id", "name"])
>>> dt
{'grade': None, 'clas': None, ' id': None, 'name': None}
点这里看视频课程