Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 输入数字,搜索列表和字典,打印相关键_Python_List_Dictionary - Fatal编程技术网

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'])