<p>你的代码通常是有效的,这意味着你的输入数据中有一些你没有在这里发布的东西丢失了。我无法用你给我们的数据重现你所看到的确切错误。你知道吗</p>
<p>有一个问题你没有考虑——你也需要循环遍历<code>laureates</code>,然后找出赢家,因为那也是一个字典列表。我是这样做的:</p>
<pre class="lang-py prettyprint-override"><code>dict_prizes = [{'year': '2018', 'category': 'physics', 'overallMotivation': '“for groundbreaking inventions in the field of laser physics”', 'laureates': [{'id': '960', 'firstname': 'Arthur', 'surname': 'Ashkin', 'motivation': '"for the optical tweezers and their application to biological systems"', 'share': '2'}, {'id': '961', 'firstname': 'Gérard', 'surname': 'Mourou', 'motivation': '"for their method of generating high-intensity, ultra-short optical pulses"', 'share': '4'}, {'id': '962', 'firstname': 'Donna', 'surname': 'Strickland', 'motivation': '"for their method of generating high-intensity, ultra-short optical pulses"', 'share': '4'}]}, {'year': '2018', 'category': 'chemistry', 'laureates': [{'id': '963', 'firstname': 'Frances H.', 'surname': 'Arnold', 'motivation': '"for the directed evolution of enzymes"', 'share': '2'}, {'id': '964', 'firstname': 'George P.', 'surname': 'Smith', 'motivation': '"for the phage display of peptides and antibodies"', 'share': '4'}, {'id': '965', 'firstname': 'Sir Gregory P.', 'surname': 'Winter', 'motivation': '"for the phage display of peptides and antibodies"', 'share': '4'}]}]
def get_laureates(dict_prizes, year = "none", category = "none"):
names = []
for row in dict_prizes:
if row["category"] == category:
for winner in row['laureates']: # You need this loop for the inner list of dictionaries
names.append(winner['firstname'] + winner['surname'])
return names
year = 2018
category = "physics"
get_laureates(dict_prizes=dict_prizes, year=2018, category=category)
</code></pre>
<p>得到:</p>
<pre><code>>>> get_laureates(dict_prizes=dict_prizes, year=2018, category=category)
['ArthurAshkin', 'GérardMourou', 'DonnaStrickland']
</code></pre>
<p>既然你正在学习<code>year</code>,你也需要解决这个部分,因为你没有,所以我没有包括</p>