我对以下无效代码有疑问:
__init__
是否可以将模式和list
(这是list
的字典-我在其中进行搜索)作为参数?在此先感谢您的帮助。
class DataBase():
# Searches Movies by title and gives its entire info :( (stupid)
def __init__(self, movies, schema):
pass
def search(self, field_name, field_value1, field_value2=None):
if field_name=='title':
mov=[]
for movie in movies:
if field_value1 == movie['movie_title']:
mov.append(movie)
return mov
if field_name=='year':
for movie in movies:
if field_value2:
if movie['title_year'] in range (field_value1, field_value2+1):
return movie['movie_title'],movie['title_year']
else:
if movie['title_year']==field_value1:
return movie['movie_title'],movie['title_year']
if field_name=='actor_1_name':
mov=[]
for movie in movies:
if field_value1 == movie['actor_1_name']:
mov.append(movie)
return mov
**strong text**
答案 0 :(得分:0)
目前尚不清楚您要做什么,并且如果没有输入和所需结果的示例很难解释,但这可能很接近。
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)
您甚至可能希望简化搜索中的比较。您可以为(两种)不同类型的比较定义辅助函数;根据参数选择要使用的比较;然后在搜索中使用选择函数。
...
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
为空-未找到电影。
答案 1 :(得分:0)
DataBase
对象调用DataBase(movies, schema)
,其中movies
和schema
是类__init__()
方法的参数。__init__()
可以根据需要使用任意数量的位置参数,但请记住将其对象分配给__init__()
主体内的适当名称,以便以后使用(请参阅{{1} }方法)。__init__()
方法中重复搜索模式,只需使用search()
参数作为匹配数据库中每个记录的键,然后将问题分为两种情况:一种为范围搜索,另一个用于普通搜索(请参见下面的field
方法)。记住要解决不匹配的情况:在我的实现中,我只返回了一个空的search()
对象。您还应该解决无效的搜索键的情况:在我的实现中,我返回DataBase
。下面的None
函数提供了一个数据库和三个搜索,既简单又在范围内。
您应该考虑将collections.namedtuple
作为数据库记录的替代表示形式。
test()