我正在尝试做这样的事情:
## a is a dataframe ##
## b is a ordered dictionary ##
for row in a.itertuples():
while True:
try:
next_iter = next(b.keys())
else:
break
if b[next_iter].method == 'run' and row.method == 'run:
print(True)
break
但是我收到TypeError:
TypeErrorTraceback(最近一次通话最近) 在()中 ----> 1个下一个(dict_by_trigger.keys())
TypeError:“ odict_keys”对象不是迭代器
创建此迭代的最佳方法是什么,这样我只遍历字典键和数据框一次?
答案 0 :(得分:0)
错误告诉您无法在next
的返回值上调用b.keys()
。我认为try-else
的逻辑有点过分。像这样循环遍历你的字典怎么样?
for row in a.itertuples():
for k, v in b.items():
if v.method == 'run' and row.method == 'run':
print(True)
break
编辑:还是您正在尝试在运行其方法的每个可迭代对象中找到对象?在那种情况下,我不会嵌入循环,而只是使用两个不同的循环。这将是O(N ^ 2)与更好的O(N)。
df_row = None
odict_val = None
for row in a.itertuples():
if row.method == 'run':
df_row = row
break
for v in b.values():
if v.method == 'run':
odict_val = v
break
答案 1 :(得分:0)
尚不完全清楚您要达到的目标,但是据我所知,您想仅一次 循环数据框和字典,即您不想重新启动内部循环数据框中的每个元素,但继续上一个迭代中您离开的位置。在这种情况下,请使用iter
函数创建字典元素的迭代器。
简化示例:
A = range(10)
B = range(10)
itB = iter(B)
for a in A:
for b in itB:
if b % 2 == 0:
print(a, b)
break
这将产生0 0
,1 2
,2 4
,3 6
,4 8
对。