使用Pytables检查列表成员资格的方法

时间:2013-08-07 03:09:41

标签: python hdf5 pytables

我正在尝试根据多个标准选择行,这些标准不能用[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的选择标准?或者我如何绕过重复的行并确保循环内收集的行保持唯一?

1 个答案:

答案 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 ]

这应该比你那里的要快得多,而且更加优雅