用于检查where表的成员列表的py方法

2024-04-20 00:54:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试基于多个条件选择行,这些条件不能用[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的选择标准?或者我如何避免重复行的问题,并确保在循环中收集的行保持唯一?你知道吗


Tags: inanhttpformyanother语句item
1条回答
网友
1楼 · 发布于 2024-04-20 00:54:04

你不能只在条件语句中使用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 ]

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

相关问题 更多 >