是否有更多时间有效的方式来填充字典

时间:2015-10-08 00:36:06

标签: python performance dictionary

我有两个整数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的排序结构?

1 个答案:

答案 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]