我正在处理一些JSON格式的足球匹配数据,这些数据保存在变量"Matches"中,通过

with open('path') as json_data:
    matches = json.load(json_data)

以下是1号比赛的数据摘录(通过"Matches[1]"获得):

{
  "status": "Played",
  "roundId": 4405517,
  "gameweek": 34,
  "teamsData": {
    "2482": {
      "scoreET": 0,
      "coachId": 272299,
      "side": "home",
      "teamId": 2482,
      "score": 3,
      "scoreP": 0,
      "hasFormation": 1,
      "formation": {
        "bench": [

字段"2482"的名称是参加比赛的两支球队中的一支的ID(另一支球队随后出现,但即使提供一场比赛的整个比赛数据也会使此帖子太长).数据是这样的(306场比赛,每场2支球队),即场地在数据中总是处于相同的位置.然而,由于字段的名称总是不同的,所以我很难在没有首先查找球队ID的情况下访问它,例如第20场比赛,因为

match[20]['teamsData'][1]

不起作用("KeyError:1").

有谁能帮帮我吗?

推荐答案

您可以将字典看作一个索引,在您的例子中,您只需用一个更方便的值重新索引数据即可.如果"side"总是"home"或"away",则可以使用已知值而不是变量Team id值.

在本例中,"TeamsData"被重新索引的词典替换.

for match in matches:
    match["teamsData"] = {value["side"]:value for value in match["teamsData"].values()}

matches[20]["teamData"]["home"]

Python相关问答推荐

使用setuptools pyproject.toml和自定义目录树构建PyPi包

对所有子图应用相同的轴格式

NumPy中条件嵌套for循环的向量化

当点击tkinter菜单而不是菜单选项时,如何执行命令?

用砂箱开发Web统计分析

在两极中过滤

(Python/Pandas)基于列中非缺失值的子集DataFrame

pysnmp—lextudio使用next()和getCmd()生成器导致TypeError:tuple对象不是迭代器''

从一个df列提取单词,分配给另一个列

为什么t sns.barplot图例不显示所有值?'

解决Geopandas和Altair中的正图和投影问题

为什么后跟inplace方法的`.rename(Columns={';b';:';b';},Copy=False)`没有更新原始数据帧?

有没有一种方法可以在朗肯代理中集成向量嵌入

如何将验证器应用于PYDANC2中的EACHY_ITEM?

具有不同坐标的tkinter canvs.cocords()和canvs.moveto()

如何在Polars中将列表中的新列添加到现有的数据帧中?

将时间序列附加到数据帧

401使用有效的OAuth令牌向Google Apps脚本Web App发出POST请求时出现未经授权的错误(";

具有数值数组问题的递归矩阵构造(广播?)

如何省略所有Pandas 数据帧