如何从一个dict打印具有相同键的两个dict值?

2024-09-28 03:14:51 发布

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

我正在使用Python组织一个电影标题列表,用于学术作业。提交截止日期已过;我只是想了解它对未来的作用

代码如下:

movies = {

2005: ['Munich', 'Steven Spielberg'],
2006: ['The Prestige', 'Christopher Nolan'],
2006: ['The Departed', 'Martin Scorsese'],
2007: ['Into the Wild', 'Sean Penn'],
2008: ['The Dark Knight', 'Christopher Nolan'],
2009: ['Mary and Max', 'Adam Elliot'],
2010: ['The King\"s Speech', 'Tom Hooper'],
2011: ['The Artist', 'Michel Hazanavicius'],
2011: ['The Help', 'Tate Taylor'],
2012: ['Argo', 'Ben Affleck'],
2013: ['12 Years a Slave', 'Steve McQueen'],
2014: ['Birdman', 'Alejandro G. Inarritu'],
2015: ['Spotlight', 'Tom McCarthy'],
2016: ['The BFG', 'Steven Spielberg']

}

userInput = int(input('Enter a year between 2005 and 2016: \n'))

print(movies[userInput])

如果我选择只有一个条目的年份,print语句可以正常工作。如果用户输入'2006'应该会显示两个标题,但我只得到2006键的后一个值。我做错了什么


Tags: andthe标题列表电影作业moviesprint
2条回答

您可以按如下方式重新组织词典:

movies = {
    2005: [('Munich', 'Steven Spielberg')],
    2006: [('The Prestige', 'Christopher Nolan'), ('The Departed', 'Martin Scorsese')],
    2007: [('Into the Wild', 'Sean Penn')],
    2008: [('The Dark Knight', 'Christopher Nolan')],
    2009: [('Mary and Max', 'Adam Elliot')],
    2010: [('The King\"s Speech', 'Tom Hooper')],
    2011: [('The Artist', 'Michel Hazanavicius'), ('The Help', 'Tate Taylor')],
    2012: [('Argo', 'Ben Affleck')],
    2013: [('12 Years a Slave', 'Steve McQueen')],
    2014: [('Birdman', 'Alejandro G. Inarritu')],
    2015: [('Spotlight', 'Tom McCarthy')],
    2016: [('The BFG', 'Steven Spielberg')]
}

电影是一个元组(title, director),年份条目是电影列表。 选择一年会给你一个电影列表

>>> print(movies[2006])
[('The Prestige', 'Christopher Nolan'), ('The Departed', 'Martin Scorsese')]

然后,您可以通过迭代列表来提取标题或导演

>>> print([movie[0] for movie in movies[2006]])
['The Prestige', 'The Departed']

>>> print([movie[1] for movie in movies[2006]])
['Christopher Nolan', 'Martin Scorsese']

键必须是字典的唯一项。因此,如果向词典中添加条目,它将覆盖使用相同密钥的任何条目

如果您坚持使用年份作为键(不知道您的作业是否出于某些奇怪的原因需要使用年份),则可以将条目放入如下列表中

{
   2005: [('Munich', 'Steven Spielberg'), ('King Kong', 'Peter Jackson')],
   ...
}

但这需要一些额外的技术,比如使用setdefault()defaultdict(或者在添加新项之前手动检查密钥是否已经存在)

注意,在我的示例中,我使用了类似元素集合的列表和不同元素集合(title/director)的元组。这可能是一个好习惯

相关问题 更多 >

    热门问题