2016-12-26 4 views
0

私はPythonで新しく、辞書機能について助けが必要です。何かがあるかどうかを確認するためにすべてのキーを渡すにはどうすればいいですか? - Python

私はそれがこのようになり、俳優や映画のテキストファイルを持っている:

Brad Pitt, Sleepers, Troy, Meet Joe Black, Oceans Eleven, Seven, Mr & Mrs Smith 
Tom Hanks, You have got mail, Apollo 13, Sleepless in Seattle, Catch Me If You Can 
Meg Ryan, You have got mail, Sleepless in Seattle 
Diane Kruger, Troy, National Treasure 
Dustin Hoffman, Sleepers, The Lost City 
... 

辞書順がセットであり、映画が鍵であり、俳優が値です。

私の入力は俳優の名前であり、彼が演奏した映画をチェックインしたいのですが、どうしたらいいですか?

私が何かしてみてください:出力

..

actor = raw_input().lower() 
coList = movieDict.keys() 
coSet = set() 
for keys in range(len(coList)): 
    for i in coList: 
     if actor == i: 
      continue 
     else: 
      coSet.add(actor) 
print (', '.join(coSet())) 

をしかし、それは動作しないようにする必要がありように思える:私はあなたがしようとしているものを理解していれば

Brad Pitt 
The actor's co-stars are: 
Angelina Jolie, Anthony Hopkins, Diane Kruger, Dustin Hoffman, George Clooney, Julia Roberts, Kevin Bacon, 
Morgan Freeman 
+1

"辞書順のセット" - 私はその句から分かりません。何を言おうとしているのですか? –

+1

残りのコードを掲載してもよろしいですか? –

答えて

1

行う。 {movie: set(actors)}の辞書を見て、あなたは俳優のすべての共演者が欲しいです。私はmovieDictが既に構築されていると仮定しています。

あなたの外部ループが意図していることを理解していませんfor keys in range(len(coList)):は完全に冗長なようです。

の簡素化:

actor = input().lower() # raw_input() in Py2 
coSet = set() 
for movie, actors in movieDict.items(): 
    if actor in actors: 
     coSet |= actors 
print(', '.join(coSet)) 

このcoSetは、元actorが含まれますが、必要に応じて、単にremove Dすることができます。

+0

まさに私が必要なのは、raw_inputは文字列のためです。これがなければ動作しません。ありがとう! –

0

俳優を検索してその映画を見たい場合は、俳優のキーとムービーをその価値観にする方がよいかもしれません。それは私が

"Brad Pitt" 

を検索し、あるや映画、あなたの入力ファイルが掲載さ抜粋に似て、あなたはパターン

'ACTOR', 'movie1', 'movie2', etc... 

あなたを持っていると仮定すると

"Sleepers, Troy, Meet Joe Black, Oceans Eleven, Seven, Mr & Mrs Smith" 

別名彼の値を取り戻しますファイルを行単位で処理し、各行をリストのように扱うことができます。リストの最初のインデックスline [0]はActor/Keyです。行の中のすべてのものは、そのキーの値となる単一のリストとして渡されます。

また、特定の値を検索し、それらのキーを返して共同スターを見つけることもできます。

私はこれがあなたがやろうとしていることだと思います。これは正しい理解ですか?これがあなたが探しているものであれば、私は出発点としてコードを投稿することができます。

0

データベースはあなたが興味のある俳優を見つけることを期待して、これまでのすべての映画を反復処理避けたいしようとしている大きくなると。

私はあなたが俳優を調べることのできる余分dictを作成しますあなたが映画を見ているものだけでなく、だからfilmography['Brad Pitt']あなたの映画のリストを提供し、cast['Sleepers']はその映画の俳優のリストを提供します。ここでは行うことができる方法は次のとおりです。

# The set-up: 

filmography = {} 
cast = {} 
with open(filename, 'rt') as fh: 
    for line in fh: 
     line = line.strip() 
     if not line: continue 
     cells = line.split(',') 
     actor = cells[0].strip() 
     movies = [movie.strip() for movie in cells[1:]] 
     filmography.setdefault(actor,[]).extend(movies) 
     for movie in movies: 
      cast.setdefault(movie,[]).append(actor) 

# The look-up: 

def CoStars(actor): 
    return {costar for movie in filmography[actor] for costar in cast[movie] if costar is not actor} 

# The test: 

for actor in filmography: 
    print(actor + ' -> ' + ', '.join(CoStars(actor))) 

プリント:

Brad Pitt -> Dustin Hoffman, Diane Kruger 
Tom Hanks -> Meg Ryan 
Meg Ryan -> Tom Hanks 
Dustin Hoffman -> Brad Pitt 
Diane Kruger -> Brad Pitt 
0

これは俳優がでてきた映画のすべてを見つけ、設定の映画でそれを入れて、その後、映画のセットを繰り返しますそれらの動きで一連のアクターを作成します。このアクターのセットは、与えられたアクターが費やしたすべてのアクターを表します。最後に、元の俳優は、costarsのセットから削除されます。

actor = raw_input().lower() 
movies = set() 
costars = set() 
for key, value in movieDict.items(): 
    if actor in value: 
    movies = movies.union(set([key])) 

for movie in movies: 
    costars = costars.union(movieDict[movie]) 

costars = costars.difference(set([actor])) 
関連する問題