<p>如果要继续使用数据结构,请修改列表代码,如下所示:</p>
<pre><code>if input_year in movie_collection:
movies_for_year = movie_collection[input_year]
print(movies_for_year['Title'], ',', movies_for_year['Director'])
</code></pre>
<p>但是,这并不能满足您的要求,因为如注释中所述,重复的年份键会相互覆盖-请使用以下方法进行测试:</p>
<pre><code>print(movie_collection)
</code></pre>
<p>1:根据您是始终首先访问电影年份,还是通过任何其他属性访问电影,请使用列表而不是具有年份属性的dicts作为电影的一部分:</p>
<pre><code>movie_collection = [
{'Year':2005, 'Title':'Munich','Director':'Steven Spielberg'},
{'Year':2005, 'Title':'The Prestige','Director':'Christopher Nolan'},
#.... rest of list here
{'Year':2016, 'Title':'The BFG','Director':'Steven Spielberg'}
]
</code></pre>
<p>输出代码如下:</p>
<pre><code>for movie in movie_collection:
if movie.get('Year', -1) == input_year:
print(movie.get('Title', 'NA'), ',', movie.get('Director', 'NA'))
</code></pre>
<p>2:为了维护您的按年索引,数据结构将是一个列表的dict,如下所示:</p>
<pre><code>movie_collection = {
2005: [{'Title':'Munich'},
{'Title':'The Prestige','Director':'Christopher Nolan'}],
#.... rest of list here
2016: [{'Title':'The BFG','Director':'Steven Spielberg'}]
}
</code></pre>
<p>输出代码变成:</p>
<pre><code>for movie in movie_collection.get(input_year, []):
print(movie.get('Title', 'NA'), ',', movie.get('Director', 'NA'))
</code></pre>
<p>一个小提示,我使用dict.get而不是切片,因为如果一个电影实体缺少一个属性,或者在第二种情况下,如果年份没有电影,这将返回保险箱提供的默认值,而不是崩溃-这也减少了dict代码中“if thing”的数量。如果你100%确定密钥存在,你可以切片,但要注意!请参阅<a href="https://docs.python.org/3/library/stdtypes.html#dict" rel="nofollow noreferrer">https://docs.python.org/3/library/stdtypes.html#dict</a>以获取有关此的详细信息</p>
<p>干杯</p>