<p>你的代码有两个问题</p>
<p>您遇到的第一个问题是:</p>
<pre><code>if actor in movie_dict:
movie_dict[actor].append(key)
else:
movie_dict[actor] = (key)
</code></pre>
<p>当你写<code>movie_dict[actor] = (key)</code>时,你不是在创建元组——括号只是为了优先。要创建元组,必须在末尾添加逗号:</p>
^{pr2}$
<p>不管怎样,这不会起到很好的效果,因为元组是不可变的。您应该使用列表:</p>
<pre><code>if actor in movie_dict:
movie_dict[actor].append(key)
else:
movie_dict[actor] = [key] # Square brackets
</code></pre>
<p>或创建新元组:</p>
<pre><code>if actor in movie_dict:
movie_dict[actor] = movie_dict[actor] + (key,)
else:
movie_dict[actor] = (key,)
</code></pre>
<p>我强烈建议你使用第一个选项。如果您真的需要使用元组,请在处理后将列表转换为元组。在</p>
<p><strong>第二个问题</strong>是你所期望的</p>
<pre><code>'rush hour 2'
</code></pre>
<p>等于</p>
<pre><code>'rush hour 2'
</code></pre>
<p>如字典所示:</p>
<pre><code>{'jackie chan':
('rush hour', 'rush hour 2'),
'crish tucker':
('rush hour', 'rush hour 2')}
</code></pre>
<p>但事实并非如此:</p>
<pre><code>>>> 'rush hour 2' == 'rush hour 2'
False
</code></pre>
<p>你怎么解决?好吧,我设计的最简单的解决方案是在空格处拆分字符串,然后用一个空格重新连接它:</p>
<pre><code>def invert_actor_dict(actor_dict):
movie_dict = {}
for key,value in actor_dict.iteritems():
for actor in value:
split_movie_name = key.split()
# 'rush hour 2'.split() == ['rush', 'hour', '2']
movie_name = " ".join(split_movie_name)
# " ".join(['rush', 'hour', '2']) == 'rush hour 2'
if actor in movie_dict:
movie_dict[actor].append(movie_name)
else:
movie_dict[actor] = [movie_name]
return movie_dict
</code></pre>