0

我正在尝试根据 [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 的选择标准?或者我怎样才能绕过重复行的事情并确保循环内收集的行保持唯一?

4

1 回答 1

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 ]

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

于 2013-08-07T05:00:38.737 回答