如何从一个字典中使用相同的键打印两个dict值?

时间:2018-04-14 14:45:07

标签: python dictionary

我正在组织一个使用Python进行学术任务的电影片名单。提交截止日期已经过去;我只是想了解它如何为未来发挥作用。

以下是代码:

fun_1(n=6)//from main
    fun_1(n=3)//since 6 > 0 {
        fun_1(n=0){//now n is not greater than zero, so don't recurse
            execute if n == 0, yes it is, so output Q
            print ++x, x was A now after ++x, x would be 'B'
        }
        since n <> 0, don't output Q
        print ++x, x was B, so print C which is after pre-incrementing x
    }
    since n <> 0, don't output Q
    print ++x, x was C, so print D which is after pre-incrementing x
}

如果我选择只有一个条目的年份,则print语句可以正常工作。如果用户输入“2006”,则应显示两个标题,但我只获得2006年密钥的后一个值。我做错了什么?

2 个答案:

答案 0 :(得分:1)

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

如果你坚持使用年份作为关键(不知道你的作业是否出于某种奇怪的原因需要这样做),那么可以将条目放在像

这样的列表中
{
   2005: [('Munich', 'Steven Spielberg'), ('King Kong', 'Peter Jackson')],
   ...
}

但这需要一些其他技巧,例如使用setdefault()defaultdict(或在添加新项目之前手动检查密钥是否已存在)。

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

答案 1 :(得分:1)

您可以像这样重新组织字典:

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