私は現在、CS テストの勉強をしていて、IMDB データベース全体がプレーンテキストであることを考慮して、共通の映画が最も多い俳優を見つけるためのコードを書こうとしています。奇妙な KeyError が発生し続けているだけです。これが私のコードです:
私が遭遇している問題は、それを実行すると、強調表示されたコードを実行するとキーエラーが発生することです。実際に文字列で辞書にインデックスを付けていること、およびそのキーが辞書にあることを確認しましたが、まだ機能していません。何か案は?
私は現在、CS テストの勉強をしていて、IMDB データベース全体がプレーンテキストであることを考慮して、共通の映画が最も多い俳優を見つけるためのコードを書こうとしています。奇妙な KeyError が発生し続けているだけです。これが私のコードです:
私が遭遇している問題は、それを実行すると、強調表示されたコードを実行するとキーエラーが発生することです。実際に文字列で辞書にインデックスを付けていること、およびそのキーが辞書にあることを確認しましたが、まだ機能していません。何か案は?
するときはother_people = people_and_their_movies
、コピーを作成していません。other_people
指しているのと同じオブジェクトをpeople_and_their_movies
指しています。したがって、 を実行すると、両方のdel other_people[actor1]
dictからアクターを削除します (それらは同じであるため)。
代わりに、してくださいother_people = people_and_their_movies.copy()
。
(ちなみに、StackOverflow では、スクリーンショットではなく、実際のコードをテキストとしてコピー アンド ペーストすることをお勧めします。この方法により、人々はコードをカット アンド ペーストし、自分で試してみて、何が問題なのかを突き止めることができます。)
問題は、次のコード行にあります。
other_people = people_and_their_movies
これは、辞書の複製コピーを作成していません。代わりに、これらの変数は両方ともメモリ内の同じ辞書を指しています。したがって、この行を実行すると:
del other_people[actor1]
people_and_their_movies が指している同じ辞書からactor1を削除しています。
これを試すことができます:
other_people = people_and_their_movies.copy()
事前に割り当てる
other_people = people_and_their_movies
だからあなたが
del other_people[actor1]
実際には、両方の辞書からそのキーを削除しています。 この時点で同じオブジェクトを指しますother_people
。people_and_their_movies
dict の真のコピーを作成する方法については、 Python のcopy
モジュールを確認してください。そうすれば、それらを安全に切り離して、2 つのうちの 1 つだけから削除できます。
itertools.combinations()を使用すると、アクターを削除する必要がなくなり、使用できるループは 1 つだけになります。
for actor1, actor2 in itertools.combinations(people_and_their_movies,2):
<whatever you want to do>