如何将值分配给列表内的python字典

时间:2019-09-13 15:33:54

标签: python json

我正在尝试为python列表中包含的字典分配值。除了在循环的第一次迭代中分配“ None”值外,我的逻辑似乎工作正常。其余的迭代将按预期分配值。

目标是遍历此json并为“ trend_values”键创建数百或数千个对象。使用json.load(filename)

将此json关联到一个名为“ data”的变量
Grid

我正在尝试通过使用以下代码来实现这一目标。

{
  "machine_id": null,
  "trend_values": [
    {
      "name": null,
      "tag": null,
      "units": null,
      "value": null
    }
  ],
  "schedule_date": null,
  "message_ids": [
    null
  ]
}

我知道上述逻辑是不正确的,因为循环在第一次迭代中分配了“ None”值,如下所示。

    data['machine_id'] = rand_machine_id
    for item in data:
       rand_tag = get_machine_tag()
       rand_unit = get_machine_unit()
       rand_int = random.randint(1,1000000)
           data['trend_values'].append(({
        'name' : device_name,
        'tag': rand_tag,
        'units': rand_unit,
        'value': rand_int}))
    data['schedule_date'] = date_time
    data['message_ids'] = message_id 

我希望第一个字典具有与'trend_values'列表中包含的以下字典相同的赋值。

3 个答案:

答案 0 :(得分:1)

您可以选择先将具有单个dict的列表替换为新的空白列表,如下所示:

data['machine_id'] = rand_machine_id
data['trend_values'] = []
for item in data:
    # code as above

答案 1 :(得分:1)

逻辑是正确的。您将值附加到列表中的第一个字典之后。您的清单中有初始数据。 您可以尝试以下方法:

{
  "machine_id": null,
  "trend_values": [],
  "schedule_date": null,
  "message_ids": [
    null
  ]
}  

或将脚本更改为:

data['machine_id'] = rand_machine_id
data['trend_values'] = []
for item in data:
   rand_tag = get_machine_tag()
   rand_unit = get_machine_unit()
   rand_int = random.randint(1,1000000)
   data['trend_values'].append(({
    'name' : device_name,
    'tag': rand_tag,
    'units': rand_unit,
    'value': rand_int}))
data['schedule_date'] = date_time
data['message_ids'] = message_id 

答案 2 :(得分:1)

null子列表中具有trend_values值的第一个子字典是从您现有的带有json.load(filename)的JSON文件中加载的。您可以修改该文件,以使trend_values(可能是message_ids)的值只是一个空子列表:

{
  "machine_id": null,
  "trend_values": [],
  "schedule_date": null,
  "message_ids": []
}