使用string中的单词作为python中的参数搜索列表

时间:2014-05-12 14:38:12

标签: list python-2.7 search operator-keyword

我可以使用一些建议,如何在列表中搜索字符串中的单词作为参数。

因此,如果我创建了一个名为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}

1 个答案:

答案 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"]}