我可以使用一些建议,如何在列表中搜索字符串中的单词作为参数。
因此,如果我创建了一个名为genre的列表,其中包含如下字符串:
['crime, drama,action']
我想使用此列表搜索包含所有流派或可能只有其中一种的电影。
我创建了一个包含有关该电影的所有信息的大列表。您在此处看到的列表中的示例:
('Saving Private Ryan (1998)', '8.5', "Tom Hanks, Matt Damon, Tom Sizemore',\n", 'action, drama, war,\n'),
所以,如果我想搜索保存私人ryan,这是一个戏剧+动作类型,但不是犯罪,我怎么能用我的流派列表来搜索它?
有没有办法按字符串中的某些内容进行搜索?
更新
所以这就是我到目前为止所做的。我试图进行我的元组电影并使用def功能。
Navn_rating = dict(zip(names1, ratings))
Actor_genre = dict(zip(actorlist, genre_list))
var = raw_input("Enter movie: ")
print "you entered ", var
for row in name_rating_actor_genre:
if var in row:
movie.append(row)
print "Movie found",movie
def process_movie(movie):
return {'title': names1, 'rating': ratings, 'actors': actorlist, 'genre': genre_list}
答案 0 :(得分:0)
您可以“使用in
在字符串中搜索:
>>> genres = 'action, drama, war,\n'
>>> 'action' in genres
True
>>> 'drama' in genres
True
>>> 'romantic comedy' in genres
False
但请注意,这可能并不总能提供您想要的结果:
>>> 'war' in 'award-winning'
True
我认为你应该改变你的数据结构。考虑使每部电影成为字典,例如
{'title': 'Saving Private Ryan', 'year': 1998, 'rating': 8.5, 'actors': ['Tom Hanks', ...], 'genres': ['action', ...]}
然后您的查询变为
if 'drama' in movie.genres and 'action' in movie.genres:
您可以使用索引,split
和切片来处理字符串元组以生成字典的值,例如:
>>> movie = ('Saving Private Ryan (1998)', '8.5', "Tom Hanks, Matt Damon, Tom Sizemore',\n", 'action, drama, war,\n')
>>> int(movie[0][-5:-1])
1998
>>> float(movie[1])
8.5
>>> movie[0][:-7]
'Saving Private Ryan'
>>> movie[2].split(",")
['Tom Hanks', ' Matt Damon', " Tom Sizemore'", '\n']
如您所见,可能需要整理一些。您可以编写一个函数,将元组作为参数并返回相应的字典:
def process_movie(movie_tuple):
# ... process the tuple here
return {'title': title, 'rating': rating, ...}
并使用map
将其应用于您的电影列表:
movies = list(map(process_movie, name_rating_actor_genre))
修改强>:
当以下行没有引发任何错误时,您将知道您的功能有效:
assert process_movie(('Saving Private Ryan (1998)', '8.5', "Tom Hanks, Matt Damon, Tom Sizemore',\n", 'action, drama, war,\n')) == {"title": "Saving Private Ryan", "year": 1998, "rating": 8.5, "actors": ["Tom Hanks", "Matt Damon", "Tom Sizemore"], "genres": ["action", "drama", "war"]}