Не совсем понятно, что вы пытаетесь сделать, и трудно интерпретировать без примера входов и желаемого результата, но это может быть близко.
class DataBase():
def __init__(self, movies, schema):
self.movies = movies
self.schema = schema
def search(self, field_name, field_value1, field_value2=None):
search_result = []
for movie in self.movies:
if field_value2:
if movie[field_name] in range((field_value1, field_value2+1)):
search_results.append(movie)
else:
if movie[field_name] == field_value1:
search_results.append(movie)
return DataBase(search_results, self.schema)
Возможно, вы даже захотите упростить сравнения в поиске.вы можете определить вспомогательные функции для (двух) различных типов сравнений;выбрать, какое сравнение использовать на основе аргументов;затем используйте в поиске функцию selected .
...
def search(self, field_name, field_value1, field_value2=None):
# comparison types
def range_comparison(movie, start=field_value1, end=field_value2):
return movie[field_name] in range(start, end+1)
def equality_comparison(movie, name=field_value1):
return movie[field_name] == name
# which comparison to use
comparison = range_comparison if field_value2 else equality_comparison
search_result = []
for movie in self.movies:
if comparison(movie):
search_results.append(movie)
# or
# search_results = [movie for movie in movies if comparison(movie)]
return DataBase(search_results, self.schema)
По какой-то причине мне это нравится, потому что она отделяет логику типа сравнения от фактического поиска.
Это не значит, что search_results
пусто - фильмы не найдены.