You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将字典列表按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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 17:34:51