Python技术问题:如何打印字典中同一键对应的多个值?
解决字典中同一键对应多个值的打印问题
嘿,我来帮你搞定这个问题~首先得提个小细节:你现在写的字典里,2006这个年份被重复赋值了两次,而Python字典的键是唯一不可重复的,所以后面的《The Departed》会直接覆盖掉前面的《The Prestige》,运行代码时你会发现2006年只剩下《The Departed》那一条数据哦。
所以第一步,我们得先修正数据结构,把每个年份对应的所有电影都存成一个嵌套列表(里面用元组来存标题和导演会更清晰),调整后的代码如下:
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')] }
(我把《The King's Speech》的引号改成了双引号包裹单引号,避免转义的麻烦~)
接下来分两种场景来说怎么打印同一键的多个值:
1. 打印指定年份的所有电影
如果你想单独打印某一年(比如2006年)的所有电影,可以先判断年份是否在字典里,再遍历对应的值列表,这样还能避免键不存在时的报错:
target_year = 2006 if target_year in movies: print(f"=== {target_year}年的电影 ===") for movie_title, director in movies[target_year]: print(f"- {movie_title} | 导演:{director}")
运行这段代码,就能清晰输出2006年的两部电影信息啦。
2. 遍历整个字典,打印所有年份的电影
如果想一次性输出所有年份的所有电影,就用items()方法遍历字典的键值对,按年份分组展示:
for year, film_list in movies.items(): print(f"\n--- {year}年上映的电影 ---") for title, director in film_list: print(f"* {title}(导演:{director})")
这样就能把每一年的所有电影都整齐列出来。
额外小技巧:避免构建字典时键被覆盖
如果你是逐步添加电影数据,不想因为重复键导致数据丢失,可以用setdefault()方法安全添加:
movies = {} # 添加单部电影 movies.setdefault(2005, []).append(('Munich', 'Steven Spielberg')) # 给2006年添加第一部电影 movies.setdefault(2006, []).append(('The Prestige', 'Christopher Nolan')) # 再给2006年添加第二部电影,不会覆盖之前的内容 movies.setdefault(2006, []).append(('The Departed', 'Martin Scorsese'))
setdefault()会先检查键是否存在,不存在就创建一个空列表作为值,之后我们再把新的电影信息append进去,这样就不会丢失数据啦。
内容的提问来源于stack exchange,提问作者Brian Cox
相关产品推荐
相关产品推荐

