Проверка на членство в списке с помощью 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 ]
это должно быть намного быстрее, чем у вас там, и намного элегантнее