2014-05-12 4 views
1

문자열로 된 단어가있는 장르 목록을 매개 변수로 검색하는 방법에 대한 조언을 사용할 수 있습니다.파이썬에서 매개 변수로 문자열의 단어 목록 검색

그래서 나는 같은 문자열이 들어 장르라는 목록을 만든 경우 :

['crime, drama,action'] 

내가 어쩌면 모든 장르하거나 단지 1이 포함 된 영화를 검색하려면이 목록을 사용하고자합니다.

나는 영화에 관한 모든 정보가 담긴 큰 목록을 만들었습니다. 목록에서 예 당신은 여기를 참조하십시오

('Saving Private Ryan (1998)', '8.5', "Tom Hanks, Matt Damon, Tom Sizemore',\n", 'action, drama, war,\n'), 

을 내가 드라마 + 액션 장르가 아니라 범죄 개인 라이언을 저장, 검색 할 그렇다면, 내가 다음 검색 내 장르 목록을 사용하는 방법 그것?

문자열에서 무엇인가 검색하는 방법이 있습니까?

UPDATE :

그래서 이것은 내가 지금까지 할 것입니다. 내 튜플 동영상을 선점하고 def 함수를 사용하려고했습니다.

>>> genres = 'action, drama, war,\n' 
>>> 'action' in genres 
True 
>>> 'drama' in genres 
True 
>>> 'romantic comedy' in genres 
False 

그러나 이것은 항상 당신이 원하는 결과를 제공하지 않을 수도 있습니다 :

>>> 'war' in 'award-winning' 
True 

I를 당신은 in를 사용 "문자열에 뭔가으로 검색"할 수

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

데이터 구조를 변경해야한다고 생각합니다. 각 영화를 사전으로 만드는 것을 고려하십시오. 1998 년 'rating'8.5, 'actors': [ 'Tom Hanks', ...], 'genres': [ 'action', ..] .]}'그러면 movie.genres에서 'drama', movie.genres : '에서'action '이됩니다. 더 많은 문자열을 튜플에 채우는 것은 아무도 돕지 않습니다. – jonrsharpe

+0

이미 모든 정보가있는 목록을 가지고있을 때 간단한 방법을 사용할 수 있습니까? 저는 파이썬 프로그래머가 아니며 사전을 전혀 사용하지 않습니다. – Raaydk

+0

사전을 정말 손에 넣어야합니다. 매우 강력한 도구입니다. [튜토리얼] (https://docs.python.org/2/tutorial/datastructures.html#dictionaries)을 읽어보십시오. 내 의견을 대답으로 작성하여 사전으로 전환하는 데 대한 몇 가지 지침을 추가했습니다. 코드 나머지 부분을 훨씬 단순하게 만들 것입니다. – jonrsharpe

답변

0

데이터 구조를 변경해야한다고 생각합니다. 예를 들어 각 영화를 사전으로 만드는 것을 고려하십시오.

>>> 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'] 

로 :

{'title': 'Saving Private Ryan', 'year': 1998, 'rating': 8.5, 'actors': ['Tom Hanks', ...], 'genres': ['action', ...]} 

그런 다음 쿼리는 당신이 사전의 값, 예를 만들기 위해 문자열의 당신의 튜플을 처리하기 위해 인덱싱, split 및 슬라이스를 사용할 수 있습니다

if 'drama' in movie.genres and 'action' in movie.genres: 

된다 당신은 볼 수 있습니다. 약간의 정리가 필요할 수도 있습니다. map를 사용

def process_movie(movie_tuple): 
    # ... process the tuple here 
    return {'title': title, 'rating': rating, ...} 

과 영화의 목록에이 적용됩니다 : 당신은 해당 사전을 인수로 튜플을 받아 반환하는 함수를 작성할 수

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"]} 
+0

아니요, 인수는 "큰 목록"의 한 튜플입니다 .-지도는 목록의 모든 튜플에 동일한 함수를 적용하는 데 사용됩니다. – jonrsharpe

+0

'zip (title, ratings, actors, genres)'같은 것을 이미 사용하고있는 것을 사용하십시오 :'movie_dicts = list (map (process_movie, zip (title, ratings, actors, 장르)))'. 'map '을 사용한다는 것은'for' 루프가 필요 없다는 것을 의미합니다. – jonrsharpe

+0

@Raaydk이 업데이트로 인해 아무 것도 변경되지 않았습니다. 단순히 이전 주석을 읽고 그에 따라 변수 이름을 조정하십시오. – jonrsharpe

관련 문제