Python 输入数字,搜索列表和字典,打印相关键
我有一个问题,从一个合并的字典和列表拉。我知道如何从每一个单独的关键点,但我需要结合起来,从两个关键点。下面是一个列出年份的词典示例。每年都有一个头衔和与之相关的董事Python 输入数字,搜索列表和字典,打印相关键,python,list,dictionary,Python,List,Dictionary,我有一个问题,从一个合并的字典和列表拉。我知道如何从每一个单独的关键点,但我需要结合起来,从两个关键点。下面是一个列出年份的词典示例。每年都有一个头衔和与之相关的董事 movie_collection = { 2005: {'Title':'Munich','Director':'Steven Spielberg'}, 2005: {'Title':'The Prestige','Director':'Christopher Nolan'}, 2006: {'Title'
movie_collection = {
2005: {'Title':'Munich','Director':'Steven Spielberg'},
2005: {'Title':'The Prestige','Director':'Christopher Nolan'},
2006: {'Title':'The Departed','Director':'Martin Scorsese'},
2007: {'Title':'Into the Wild','Director':'Sean Penn'},
2008: {'Title':'The Dark Knight','Director':'Christopher Nolan'},
2009: {'Title':'Mary and Max','Director':'Adam Elliot'},
2010: {'Title':'The King''s Speech','Director':'Tom Hooper'},
2011: {'Title':'The Artist','Director':'Michel Hazanavicius'},
2011: {'Title':'The Help','Director':'Tate Taylor'},
2012: {'Title':'Argo','Director':'Ben Affleck'},
2013: {'Title':'12 Years a Slave','Director':'Steve McQueen'},
2014: {'Title':'Birdman','Director':'Alejandro G. Inarritu'},
2015: {'Title':'Spotlight','Director':'Tom McCarthy'},
2016: {'Title':'The BFG','Director':'Steven Spielberg'}
}
我还有代码提示输入年份在2005年到2016年之间。如果年份不在这两个年份之间,它将打印N/a
input_year = int(input('Enter a year between 2005 and 2016:\n'))
if input_year < 2005:
print('N/A')
elif input_year > 2016:
print('N/A')
else:
print(input_year)
但它没有输出正确的信息
Enter a year between 2005 and 2016:
2011
Director , Title
Director , Title
Director , Title
Director , Title
...
我试着以多种方式列出它,但它不能正确地提取信息。我对python还是新手,我确实尝试过谷歌和必应,但在我寻找的信息方面运气不佳。谁能给我指出正确的方向吗?我把字典写错了吗?或者我只是没有使用正确的方式打印信息。谢谢如果您想继续使用您的数据结构,请修改列表代码,如下所示:
if input_year in movie_collection:
movies_for_year = movie_collection[input_year]
print(movies_for_year['Title'], ',', movies_for_year['Director'])
但是,这不会满足您的需求,因为如注释中所述,重复的年份键会相互覆盖-请使用以下方法进行测试:
print(movie_collection)
1:根据您始终是先年访问电影,还是通过任何其他属性访问电影,请使用列表而不是带有“年”属性的dicts作为电影的一部分:
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'}
]
输出代码如下所示:
for movie in movie_collection:
if movie.get('Year', -1) == input_year:
print(movie.get('Title', 'NA'), ',', movie.get('Director', 'NA'))
2:为了维护按年索引,数据结构将是一个列表的目录,如下所示:
movie_collection = {
2005: [{'Title':'Munich'},
{'Title':'The Prestige','Director':'Christopher Nolan'}],
#.... rest of list here
2016: [{'Title':'The BFG','Director':'Steven Spielberg'}]
}
输出代码变为:
for movie in movie_collection.get(input_year, []):
print(movie.get('Title', 'NA'), ',', movie.get('Director', 'NA'))
一个小提示,我使用dict.get而不是切片,因为如果电影实体缺少属性,或者在第二种情况下,如果年份没有电影,这将返回安全提供的默认值,而不是崩溃-这也减少了dict代码中“if thing”的数量。如果您100%确定密钥存在,您可以进行切片,但需要得到警告!有关此操作的更多信息,请参阅
干杯year\u input=input(“输入年份”)
如果年份输入str(2016年):
打印(不适用)
其他:
打印(电影集[str(年度输入)]['Title'],',',,电影集[str(年度输入)]['Director'])
由于键是年,是整数,我们需要将其转换为字符串。所以我在最后一行使用str()进行了转换 类似于电影收藏中的年:打印(电影收藏[年]['Title'],电影收藏[年]['Director'])。您应该注意,没有两个
movie\u collection
条目可以共享同一年(键)。相反,最后面的将覆盖以前的所有条目。谢谢Patrick的快速响应。我已经修改了你建议的代码,除了关于“没有两个电影收藏条目可以共享同一年(键)”的部分外,它工作得非常好。实际上我甚至没有想到这一点,因为说明说要按年份列出,并将标题和导演合并到一个列表中。有没有关于如何重新编码的建议,以便仍然遵循年份输入格式,并将“Title and Director”保留为一个列表?因为键是年份,这是需要转换为字符串的整数。因此,在“打印(电影收藏[str(年份输入)]['Title'],','和',电影收藏[str(年份输入)]['Director'])”行使用str()进行转换
for movie in movie_collection.get(input_year, []):
print(movie.get('Title', 'NA'), ',', movie.get('Director', 'NA'))
year_input = input("Enter the year\n")
if year_input < str(2005):
print('N/A')
elif year_input > str(2016):
print('N/A')
else:
print(movie_collection[str(year_input)]['Title'], ',', movie_collection[str(year_input)]['Director'])