我现在正在为我的 CS 测试而学习,并尝试编写代码,给定整个 IMDB 数据库以明文形式,找到与最多共同电影的演员。我已经完成了,我只是不断地遇到一个奇怪的 KeyError。这是我的代码:
我遇到的问题是,当我运行它时,它在运行突出显示的代码时会产生一个 keyerror。我已经验证它确实在用字符串索引字典,并且所述键在字典中,但它仍然无法正常工作。有任何想法吗?
我现在正在为我的 CS 测试而学习,并尝试编写代码,给定整个 IMDB 数据库以明文形式,找到与最多共同电影的演员。我已经完成了,我只是不断地遇到一个奇怪的 KeyError。这是我的代码:
我遇到的问题是,当我运行它时,它在运行突出显示的代码时会产生一个 keyerror。我已经验证它确实在用字符串索引字典,并且所述键在字典中,但它仍然无法正常工作。有任何想法吗?
当你这样做时other_people = people_and_their_movies
,你不是在制作副本。您正在other_people
指向指向的同一对象people_and_their_movies
。所以当你这样做时,你会从两个del other_people[actor1]
字典中删除演员(因为它们是相同的)。
相反,做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()
Use itertools.combinations() - and you won't have to delete actors, and you'll be able to use only one loop:
for actor1, actor2 in itertools.combinations(people_and_their_movies,2):
<whatever you want to do>
之前你分配
other_people = people_and_their_movies
所以当你
del other_people[actor1]
您实际上是从两个字典中删除该键。 other_people
并people_and_their_movies
在此时指向同一个对象。
查看 python 的copy
模块以获取制作 dict 的真实副本的方法,这样您就可以安全地将它们解耦并仅从两者中的一个中删除。