输入数字,搜索列表和字典,打印相关键

2024-09-28 03:24:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个问题,从一个综合字典和列表拉。我知道如何从每一个单独拉钥匙,但我需要把他们结合起来,从两个拉钥匙。下面是列出年份的词典示例。每年都有一个头衔和与之相关的董事

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)

现在我遇到了一个问题。在else声明之后,我还需要打印与输入年份相关的电影的标题和导演。例如,如果输入2011年,则输出需要为:

请输入2005年到2016年之间的年份: 2011 艺术家Michel Hazanavicius 救命啊,泰特·泰勒

我编写了以下代码

if input_year in movie_collection:
    for Title,Director in movie_collection.values():
        print(Title,',',Director)

但是它没有输出正确的信息

Enter a year between 2005 and 2016:
2011
Director , Title
Director , Title
Director , Title
Director , Title
...

我试着用多种方式列出它,但它不能正确地提取信息。我对python还是个新手,我确实尝试过google和bing,但在我寻找的信息上却一无所获。有人能给我指出正确的方向吗?我把字典写错了吗?或者我只是没有用正确的方式打印信息。谢谢


Tags: andthe信息input字典titlemovieyear
2条回答

如果要继续使用数据结构,请修改列表代码,如下所示:

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:为了维护您的按年索引,数据结构将是一个列表的dict,如下所示:

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%确定密钥存在,你可以切片,但要注意!请参阅https://docs.python.org/3/library/stdtypes.html#dict以获取有关此的详细信息

干杯

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

因为键是年,是整数,所以我们需要转换成字符串。所以我在最后一行使用str()进行了转换

相关问题 更多 >

    热门问题