我正在尝试为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'列表中包含的以下字典相同的赋值。
答案 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": []
}