簡體   English   中英

如何循環兩個python生成器

[英]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_genref_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM