如何将字典列表按Day与Championship分组为嵌套字典结构?
按Day和Championship字段嵌套分组字典列表的最简实现
需求说明
将给定的字典列表按Day字段和Matches中的Championship字段进行分组,生成以Day为顶级键、Championship为次级键,对应值为同组字典列表的嵌套结构。
输入示例
[ { "Day": "Giornata 29", "Matches": { "Home": "Egnatia", "Away": "Kukesi", "Times": "19.03. 15:00", "Championship": "CALCIO\nALBANIA Super League\n2023/2024" } }, { "Day": "Giornata 29", "Matches": { "Home": "Egnatia", "Away": "Kukesi", "Times": "20.03. 16:09", "Championship": "CALCIO\nALBANIA Super League\n2023/2024" } }, { "Day": "Giornata 41", "Matches": { "Home": "Lincoln", "Away": "Leyton Orient", "Times": "19.03. 16:00", "Championship": "CALCIO\nINGHILTERRA League One\n2023/2024" } }, { "Day": "Giornata 30", "Matches": { "Home": "Napoli", "Away": "Atalanta", "Times": "30.03. 12:30", "Championship": "CALCIO\nITALIA Serie A\n2023/2024" } } ]
期望输出示例
{ "Giornata 29": { "CALCIO\nALBANIA Super League\n2023/2024": [ { "Day": "Giornata 29", "Matches": { "Home": "Egnatia", "Away": "Kukesi", "Times": "19.03. 15:00", "Championship": "CALCIO\nALBANIA Super League\n2023/2024" } }, { "Day": "Giornata 29", "Matches": { "Home": "Egnatia", "Away": "Kukesi", "Times": "20.03. 16:09", "Championship": "CALCIO\nALBANIA Super League\n2023/2024" } } ] }, "Giornata 41": { "CALCIO\nINGHILTERRA League One\n2023/2024": [ { "Day": "Giornata 41", "Matches": { "Home": "Lincoln", "Away": "Leyton Orient", "Times": "19.03. 16:00", "Championship": "CALCIO\nINGHILTERRA League One\n2023/2024" } } ] }, "Giornata 30": { "CALCIO\nITALIA Serie A\n2023/2024": [ { "Day": "Giornata 30", "Matches": { "Home": "Napoli", "Away": "Atalanta", "Times": "30.03. 12:30", "Championship": "CALCIO\nITALIA Serie A\n2023/2024" } } ] } }
最简实现方式
方法1:纯字典操作(无额外依赖)
这种方式不需要导入任何库,代码直观简洁:
def group_matches(matches_list): result = {} for item in matches_list: day = item["Day"] championship = item["Matches"]["Championship"] # 初始化顶级Day键对应的字典 if day not in result: result[day] = {} # 初始化次级Championship键对应的列表 if championship not in result[day]: result[day][championship] = [] result[day][championship].append(item) return result
方法2:使用collections.defaultdict(代码更紧凑)
借助Python标准库的defaultdict可以省略键存在性判断,进一步简化代码:
from collections import defaultdict def group_matches(matches_list): result = defaultdict(lambda: defaultdict(list)) for item in matches_list: day = item["Day"] championship = item["Matches"]["Championship"] result[day][championship].append(item) # 转换为普通字典(可选,若不需要defaultdict的自动初始化特性) return {k: dict(v) for k, v in result.items()}
两种方法都能高效完成分组需求,纯字典操作适合追求轻量无依赖的场景,defaultdict方式则让代码更简洁。
内容的提问来源于stack exchange,提问作者x__SHARINGAN____x
相关产品推荐
相关产品推荐

