合并字典与列表后提取键的技术问题咨询
嘿,我看到你在处理嵌套的字典(还有可能结合列表)提取键的时候遇到了麻烦,先给你提个小细节:你写的movie_collection示例里,2005这个键重复出现了两次,Python字典里同一个键只能保留最后一个对应的值,所以第一个2005对应的《Munich》那条数据会被后面的《The Prestige》覆盖掉,实际用的时候得注意避免这种情况哦!
下面分不同场景给你讲怎么提取各类键:
一、提取外层的年份键
如果你的需求是拿到所有作为键的年份,直接用字典的keys()方法就搞定了,示例代码如下:
# 修正重复键的问题,把2005的电影放到列表里(更合理的结构) movie_collection = { 2005: [{'Title':'Munich','Director':'Steven Spielberg'}, {'Title':'The Prestige','Director':'Christopher Nolan'}], 2006: {'Title':'The Departed','Director':'Martin Scorsese'}, 2007: {'Title':'No Country for Old Men','Director':'Coen Brothers'} } # 提取外层年份键 year_keys = movie_collection.keys() # 转成列表方便查看 print(list(year_keys)) # 输出:[2005, 2006, 2007]
二、提取内层字典的所有唯一键
要是你想拿到所有电影信息字典里的键(比如Title、Director,如果后面有其他字段也能一并提取),可以遍历每个年份对应的值,收集内层字典的键再去重:
inner_keys = set() # 用集合自动去重 for item in movie_collection.values(): if isinstance(item, list): # 如果年份对应的是电影列表,遍历每个电影字典 for movie in item: inner_keys.update(movie.keys()) elif isinstance(item, dict): # 如果年份对应的是单个电影字典,直接取键 inner_keys.update(item.keys()) print(list(inner_keys)) # 输出:['Title', 'Director']
三、提取所有层级的键(外层年份+内层字段键)
如果想把外层的年份和内层的字段键都收集到一起,可以把上面两种方法结合起来:
all_keys = [] # 先添加外层年份键 all_keys.extend(movie_collection.keys()) # 再添加内层字段键(去重后) inner_keys = set() for item in movie_collection.values(): if isinstance(item, list): for movie in item: inner_keys.update(movie.keys()) elif isinstance(item, dict): inner_keys.update(item.keys()) all_keys.extend(inner_keys) print(all_keys) # 输出:[2005, 2006, 2007, 'Title', 'Director']
这样不管是纯嵌套字典,还是字典里混合了列表的情况,都能轻松提取到你需要的键啦!
内容的提问来源于stack exchange,提问作者TheKoaohan
相关产品推荐
相关产品推荐

