用python编写嵌套字典json.dump文件

2024-05-17 17:31:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一组python列表,我想在一个json文件中串行地写入一个如下所示的结构

[

{
    "_id": {
        "$oid": "5707b5f4e4b0c4265caf3c87"
    },
    "TimeStamp": 1,
    "TraceData": [
        {
            "data": {
                "y": 443.732,
                "angle": 1.11416,
                "speed": 1.42906,
                "ObjectType": "Pedestrians",
                "x": 217.991,
                "D2D": "DUE_1_2"
            },
            "id": "DUE_1_1"
        },
        {
            "data": {
                "y": 571.965,
                "angle": 1.22555,
                "speed": 1.18132,
                "ObjectType": "Pedestrians",
                "x": 205.708,
                "D2D": "DUE_20_1"
            },
            "id": "DUE_20_2"
        }
    ]
},
{
    "_id": {
        "$oid": "5707b5a8e4b0a37fb1a38c57"
    },
    "TimeStamp": 2,
    "TraceData": [
        {
            "data": {
                "y": 419.936,
                "angle": 1.21995,
                "speed": 1.38648,
                "ObjectType": "Pedestrians",
                "x": 153.693,
                "D2D": "DUE_1_2"
            },
            "id": "DUE_1_1"
        },
        {
            "data": {
                "y": 571.143,
                "angle": 1.0939,
                "speed": 1.31394,
                "ObjectType": "Pedestrians",
                "x": 295.097,
                "D2D": "DUE_20_1"
            },
            "id": "DUE_20_2"
        }
    ]
}

]

我有每个变量的python列表('y'、'x'、'angle'、'speed'等)。我用python创建了嵌套字典,通过FOR循环编写这些列表。代码如下

^{pr2}$

生成以下代码。我不明白 1) 如何以相似的结构迭代地填充字典 2) 向键“TimeStamp”添加值# 3) 正在创建密钥-“id”

{
"TimeStamp": {
    "TraceData": {
        "data": {
            "x": "7.739439",
            "speed": "6.072069",
            "y": "49.421938",
            "ObjectType": "Bus",
            "angle": "68.576206"
        }
    }
}
}

谢谢你的帮助


Tags: 代码id列表data字典结构timestampd2d
1条回答
网友
1楼 · 发布于 2024-05-17 17:31:44

我假设这就是您想要的,因为您不能让dict {}保存没有键的值:

[{
    "TimeStamp": 1,
    "TraceData": [{
        "data": {
            "y": 443.732,
            "angle": 1.11416,
            "speed": 1.42906,
            "ObjectType": "Pedestrians",
            "x": 217.991,
            "D2D": "DUE_1_2"
        },
        "id": "DUE_1_1"
    }, {
        "data": {
            "y": 430.645,
            "angle": 1.07287,
            "speed": 1.41977,
            "ObjectType": "Pedestrians",
            "x": 234.104,
            "D2D": "DUE_1_1"
        },
        "id": "DUE_1_2"
    }, {
        "data": {
            "y": 362.25,
            "angle": 1.43214,
            "speed": 1.44059,
            "ObjectType": "Pedestrians",
            "x": 50.5509,
            "D2D": "DUE_2_2"
        },
        "id": "DUE_2_1"
    }]
}, {
    "TimeStamp": 2,
    "TraceData": [{
        "data": {
            "y": 443.732,
            "angle": 1.11416,
            "speed": 1.42906,
            "ObjectType": "Pedestrians",
            "x": 217.991,
            "D2D": "DUE_1_2"
        },
        "id": "DUE_1_1"
    }, {
        "data": {
            "y": 430.645,
            "angle": 1.07287,
            "speed": 1.41977,
            "ObjectType": "Pedestrians",
            "x": 234.104,
            "D2D": "DUE_1_1"
        },
        "id": "DUE_1_2"
    }, {
        "data": {
            "y": 362.25,
            "angle": 1.43214,
            "speed": 1.44059,
            "ObjectType": "Pedestrians",
            "x": 50.5509,
            "D2D": "DUE_2_2"
        },
        "id": "DUE_2_1"
    }]
}]

因此,基本上是一个dicts {}(#1)的列表[],每个都有一个标识“时间戳”和一个“TraceData”列表[],它还包含dicts {}(#2),每一个都包含一个“id”和“data”。在

您的代码:

^{pr2}$

查看单个dict(类型为#1),然后执行几个错误:

  1. “TimeStamp”应该是跟踪帧的标识符,比如整数或字符串,而不是dict {},但无论如何都可以作为dict访问它。在
  2. “TraceData”是一个列表[],因此您需要这样访问它-它可能包含多个dict {}(#2),实际上在您的示例中确实如此。在
  3. 您访问“数据”dict并写入相关信息,但再一次,您只对一个dict#1和一个dict#2执行此操作,因此结果似乎只包含每个dict#1中的一个。在

这就是在正确构建时应该如何访问它,或多或少,这样您就可以了解如何修复代码:

for traceFrame in traceFrames:
   print(traceFrame["TimeStamp"])
   for traceData in traceFrame["TraceData"]:
      print(traceData["id"], "  > ", traceData["data"])

相关问题 更多 >