[英]How to loop over two python Generators
我有两个 python 生成器。 说
1) txn_gen
,产生字典值,如
{'id': 1,'ref_no': 4323453536, 'amt': 678.00, 'txn_date': '12-11-2019'}
.
.
.
{'id':10000000 , 'ref_no':8523118426, 'amt':98788.00, 'txn_date': '12-11-2019'}
2)acc_gen,产生字典值,如
{'ref_no': 4323453536, 'acc_no': 123456789, 'amt': 98789.00}
.
.
.
{'ref_no': 8523118426, 'acc_no': 123456789, 'amt': 45654567.00}
我想循环txn_gen
超过acc_gen
为ref_no
匹配。 我是这样循环的。
for gen1 in txn_gen:
for gen2 in acc_gen:
if gen1[1] == gen2[0]:
print(gen2)
但我只得到一个匹配值,即第一个匹配值。 我期待数百万个匹配值。
我想提高性能,因为我有数百万条记录。
一个生成器只能被评估一次。 你已经消耗所有的值后acc_gen
,并继续到下一个值txn_gen
,您可以通过不循环acc_gen
一次。
对于这种分析,你可以遍历txn_gen
并将每个ref_no
保存在一个哈希表中,然后遍历acc_gen
以查找它们的ref_no
字段。
一旦你消耗了一个生成器,你就不能再次迭代它。 如果内存成本可以接受,一种方法是将它们(或至少是内部的)转换为列表:
acc_gen = list(acc_gen)
for gen1 in txn_gen:
...
如果您无法证明空间复杂性,则必须在第二个for
语句之前重置或重新初始化acc_gen
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.