【发布时间】:2017-01-20 09:55:00
【问题描述】:
我有一个从l2 中每个元组的第一个索引中提取的唯一整数列表。
我正在尝试在元组的第一个索引(即唯一列表中的每个项目)上执行groupby in l2 之类的操作,这样我就可以计算元组的第二个索引出现的次数l2 存在于 l3 中。 - 请参阅示例。
为此,我为唯一列表中的每个项目设置了一个字典,并在每次循环后重置。 dict键是l3中的每个值。
我的代码运行良好,但当我有大量数据时,它会非常慢,因为有很多循环。
有什么方法可以提高效率和速度?
l1 = [1,2,3]
l2 = [(1,'a'),(3,'c'),(3,'b'),(2,'b'),(1,'a'),(3,'a')]
l3 = ['a','b']
d = defaultdict(int)
for i in l1:
d = d.fromkeys(d, 0) # reset dict values to 0
for t in l2:
if i==t[0]:
if t[1] in l3:
d[t[1]] +=1
print d
例子:
when i == 1:
d = {'a':2,'b':0}
【问题讨论】:
-
实数是多少? l1 和 l3 具体有多大?
-
我得到关键错误:
KeyError: 'a'可能是因为您重新创建了一个标准字典(不是默认字典)覆盖了 d。所以你的minimal reproducible example 不起作用。 -
l1 的长度可以达到 30000。L2 甚至更多,因为它并不明显
标签: python performance loops