Проверка на членство в списке с помощью Pytables, где метод

Я пытаюсь выбрать строки на основе нескольких критериев, которые не могут быть легко выражены с помощью условных операторов, которые [pytables allow] ( 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 потерять свою идентичность и стать последним назначенным рядом. Так что в основном я получаю список дублирующихся строк.

Есть ли элегантный способ использования членства в списке в качестве критерия выбора для таблиц? Или как я могу обойти двойную вещь и убедиться, что строки, собранные внутри цикла, остаются уникальными?

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 ]

это должно быть намного быстрее, чем у вас там, и намного элегантнее

Другие вопросы по тегам