首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有更有时间效率的方法来填充字典?

是否有更有时间效率的方法来填充字典?
EN

Stack Overflow用户
提问于 2015-10-08 00:36:06
回答 1查看 110关注 0票数 2

我有两个整数A和B的列表,长度相同。列表A是无序的列表整数,而列表B是具有重复项的整数的有序列表(按升序排列)。

A和B是被创造的,这样就没有一对情侣爱,比是相同的。

我的目标是创建一个字典,其中包含A的键值,B的值与Ai成对的匹配,即,

代码语言:javascript
复制
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的排序结构呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-08 00:56:02

您可以使用一个应该更简单、更快的违约

代码语言:javascript
复制
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()的等效技术相比,该技术更简单、更快。

你得到了什么:

代码语言:javascript
复制
>>> purchase_dict
defaultdict(<class 'list'>, {2: [3, 6], 3: [3, 7], 5: [4], 6: [1, 2]})
>>> purchase_dict[2]
[3, 6]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33004718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档