我有两个整数A和B的列表,长度相同。列表A是无序的列表整数,而列表B是具有重复项的整数的有序列表(按升序排列)。
A和B是被创造的,这样就没有一对情侣爱,比是相同的。
我的目标是创建一个字典,其中包含A的键值,B的值与Ai成对的匹配,即,
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的排序结构呢?
发布于 2015-10-08 00:56:02
您可以使用一个应该更简单、更快的违约:
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)来自文档
当第一次遇到每个键时,它还没有出现在映射中;因此,使用返回空列表的
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]https://stackoverflow.com/questions/33004718
复制相似问题