<p>第一个问题是语法错误:</p>
<pre><code>John = Survivor{'John', 50, 40, 55, 20}
</code></pre>
<p>在Python中,调用构造函数就像调用普通函数一样,使用括号:</p>
<pre><code>John = Survivor('John', 50, 40, 55, 20)
</code></pre>
<hr/>
<p>你的第二个问题是你不能仅仅用一个键列表来<code>update</code>一个dict;你需要用一个dict(或者一个键值对列表)来更新它。不然它怎么知道你想要什么价值观?所以:</p>
<pre><code>TribeA.update({'John': John, 'Bob': Bob, 'Joe': Joe, 'Tyler': Tyler})
</code></pre>
<p>但实际上没有理由仅仅为了<code>update</code>而创建一个空的dict;只需一次性创建它:</p>
<pre><code>TribeA = {'John': John, 'Bob': Bob, 'Joe': Joe, 'Tyler': Tyler}
</code></pre>
<p>如果每个名字要写两遍似乎是重复的,你可以通过使用听写理解来解决这个问题:</p>
<pre><code>TribeA = {survivor.name: survivor for survivor in (John, Bob, Joe, Tyler)}
</code></pre>
<p>或者,也许您不想首先创建这些变量;您可以直接将对象存储在dict中:</p>
<pre><code>TribeA = {}
TribeA['John'] = Survivor('John', 50, 40, 55, 20)
# etc.
</code></pre>
<hr/>
<p>你的第三个问题是你理解语法有误:</p>
<pre><code>strongest = max(Survivor, Survivor.str) for Survivor in TribeA
</code></pre>
<p>你必须把整个理解放在传递给<code>max</code>的括号里。而且,你要按强度来分类,所以你要把强度放在第一位,而不是一对一对。最后,如果你的部族是一个dict,你不能只是在dict上循环,它只是给你钥匙。您需要在值上循环:</p>
<pre><code>strongest = max((survivor.str, survivor) for survivor in TribeA.values())
</code></pre>
<p>但请注意,这不仅会给你最强大的幸存者,而且会给你两个值,最强大的幸存者的力量和幸存者。你可以扔掉你不想要的:</p>
<pre><code>_, strongest = max((survivor.str, survivor) for survivor in TribeA.values())
</code></pre>
<p>…但使用键函数可能更好,如<a href="https://docs.python.org/3/howto/sorting.html#sortinghowto" rel="nofollow noreferrer">Sorting HOWTO</a>中所述:</p>
<pre><code>strongest = max(TribeA.values(), key=lambda survivor: survivor.str)
</code></pre>