我有两个整数A和B的列表,长度相同。列表A是无序列表整数,而列表B是有重复的整数列表(按升序排列)。
创建A和B使得成对没有情侣A [i],B [i]是相同的。
我的目标是创建一个字典,其键值取自A,其中B的值与A [i]成对匹配,即
myDict = {}
for i in A:
myDict[i] = []
for i in range(len(A)):
targetA = A[i]
targetB = B[i]
if targetA in myDict.keys():
myDict[targetA].append(targetB)
对于非常大的数据集,这需要很长时间。是否有另一种方法可以最终提出相同的字典,可能是通过利用B的排序结构?
答案 0 :(得分:2)
您可以使用更简单,更快捷的defaultdict:
from collections import defaultdict
A = [6, 6, 3, 2, 5, 2, 3]
B = [1, 2, 3, 3, 4, 6, 7]
purchase_dict = defaultdict(list)
for key, value in zip(A, B):
purchase_dict[key].append(value)
来自docs:
第一次遇到每个密钥时,它不在映射中;因此,使用
default_factory
函数自动创建一个条目,该函数返回一个空列表。然后list.append()
操作将值附加到新列表。当再次遇到密钥时,查找会正常进行(返回该密钥的列表),list.append()
操作会向列表中添加另一个值。这种技术比使用dict.setdefault()
的等效技术更简单,更快速。
你得到了什么:
>>> purchase_dict
defaultdict(<class 'list'>, {2: [3, 6], 3: [3, 7], 5: [4], 6: [1, 2]})
>>> purchase_dict[2]
[3, 6]