我正在尝试根据多个标准选择行,这些标准不能用[pytables允许]的条件语句轻易表达 (http://pytables.github.io/usersguide/condition_syntax.html)。
我也不想将一个非常长的字符串格式化为条件参数,因为这看起来很糟糕。
所以我试图收集数组中的行,希望我可以对行进行额外的选择
my_list1 = ['a', 'b', 'c']
my_list2 = ['5', '6', '7']
rows_selected = []
for an_item in my_list1:
for row in table_all.where("letters == an_item"):
for another_item in my_list2:
if row['numbers'] == another_item:
print row
rows_selected.append(row)
这种设置可行(虽然不是很优雅)。但问题是,rows_selected
中收集的所有行都会丢失其身份并成为最后分配的行。所以基本上我最终会得到一个重复行列表。
是否有一种优雅的方式使用列表成员资格作为pytables的选择标准?或者我如何绕过重复的行并确保循环内收集的行保持唯一?
答案 0 :(得分:1)
您不能在条件中使用an_item
。它不会随循环而改变。我很惊讶你甚至没有任何东西,即
table_all.where("letters == an_item")
应该是
table_all.where("letters == %s" % an_item)
为什么不尝试像
这样的东西 row_selected = [ table_all.readWhere("(letters == %s) & (numbers == %s)" % (l, n) ) for l in my_list1 for n in my_list2 ]
这应该比你那里的要快得多,而且更加优雅