相交两个字典

假设我有两个字典,如下所示:

dict1 = {vessel1: [a, b, c], vessel2: [a, d, e], ...} dict2 = {operation1: [a, d], operation2: [a, e, b], ...} 

每个字典( dict1dict2 )是一个字典词典,所以abcdefg也是字典。

我想要的是,例如,与dict2(operation2)相交dict1(vessel1) dict2(operation2) ,并有一个结果字典如下:

 result_dictionary_of_intersection = [a, b] 

也就是说,有一个结果字典只包含vessel1和operation2都有的项目。

记住: ab也是字典。

这将按照您的意愿返回a和b字典。 这假定vessel1字典的关键字是string“vessel1”,而operation2字典的关键字是“operation2”。 你当然可以用代码中的variablesreplace这些string。

 Dim newDict As Dictionary Set newDict = New Dictionary For Each myKey In dict1("vessel1").Keys If dict2("operation2").Exists(myKey) Then newDict.Add myKey, dict2("operation2")(myKey) End If Next 

如果你想在dict1和dict2中使用更多的灵活性,你可以这样做(这实际上使得代码更具可读性):

 Set tmpDict1 = dict1("vessel1") Set tmpDict2 = dict2("operation2") Dim newDict As Dictionary Set newDict = New Dictionary For Each myKey In tmpDict1.Keys If tmpDict2.Exists(myKey) Then newDict.Add myKey, tmpDict2(myKey) End If Next 

你可能会觉得这很有帮助:

 Sub testMe() Dim dict1 As New Dictionary Dim dict2 As New Dictionary Dim dict3 As New Dictionary Dim dictAll As New Dictionary Dim dictUnion As New Dictionary Dim dictTemp As New Dictionary dict1.Add "A", "A" dict1.Add "B", "B" dict1.Add "C", "C" dict1.Add "D", "D" dict1.Add "E", "E" dict2.Add "C", "C" dict2.Add "D", "D" dict2.Add "E", "E" dict2.Add "F", "F" dict3.Add "C", "C" dict3.Add "D", "D" dictAll.Add 1, dict1 dictAll.Add 2, dict2 dictAll.Add 3, dict3 Dim var As Variant Dim i As Integer Set dictUnion = dictAll(1) For Each var In dictAll Set dictTemp = dictAll(var) Set dictUnion = intMe(dictUnion, dictTemp) Next 'Set dictUnion = intMe(dict1, dict2) For Each var In dictUnion Debug.Print var Next Set dict1 = Nothing Set dict2 = Nothing Set dict3 = Nothing Set dictAll = Nothing Set dictUnion = Nothing Set dictTemp = Nothing End Sub Function intMe(dict1 As Dictionary, dict2 As Dictionary) As Dictionary Dim dictInt As New Dictionary Dim var As Variant For Each var In dict1.Keys If dict2.Exists(var) Then dictInt.Add var, var End If Next Set intMe = dictInt End Function Sub Intersect(dAll As Dictionary) Dim var As Variant Dim subVar As Variant Dim dict As Dictionary For Each var In dAll If var <> "Account_LV0" And var <> "Account_LV1" Then Set dict = dAll(var) Debug.Print var & "|" & dict.Count 'For Each subVar In dict.Keys ' Debug.Print subVar 'Next End If Next End Sub