Python3:遍历对象并向数组或对象添加属性

时间:2017-01-25 23:13:37

标签: json django python-3.x for-loop

我正在尝试遍历某些对象并将某些属性添加到要作为JSON发送回视图的数组中:

data = {}
camera_logs = CameraLog.objects.filter(camera_id=camera_id)
for log in camera_logs :
    setattr(data, 'celsius', log.celsius)
    setattr(data, 'fahrenheit', log.fahrenheit)

return JsonResponse(data)

我对Python很陌生,所以我不确定我是否在正确的轨道上。

2 个答案:

答案 0 :(得分:1)

访问Python词典比使用setattr容易得多。 你有两个选择。创建一个ID为Keys的字典或只是一个简单的列表。

import json

data = {}
camera_logs = CameraLog.objects.filter(camera_id=camera_id)
for log in camera_logs :
    data[log.id] = log.celsius

return Response(json.dumps(data))

在上面的解决方案中,您将获得一个ID为CameraLog的字典作为KEY,作为值,您将拥有摄氏度。基本上你的json看起来像这样:

{
   1: 20,
   2: 19,
   3: 21
}

第二种方法是发送一个简单的值列表,但我想你想要有信息,什么相机有什么温度

import json

data = []
camera_logs = CameraLog.objects.filter(camera_id=camera_id)
for log in camera_logs :
    data.append(log.celsius)

return Response(json.dumps(data))

编辑回答

如果你想要一个dicts列表,可以这样做:

import json

data = []
camera_logs = CameraLog.objects.filter(camera_id=camera_id)
for log in camera_logs :
    data.append({
        'camera_id': log.id,
        'celsius': log.celsius,
        'fahrenheit': log.fahrenheit
     })

return Response(json.dumps(data))

答案 1 :(得分:0)

您只需使用.values_list从查询集中选择所需的属性即可增强查询。

import json

camera_logs = CameraLog.objects.filter(camera_id=camera_id).values_list(
    'celsius', 'fahrenheit')
data = [{"celcius": cel, "fahrenheit": fahr} for cel, fahr in camera_logs]
return Response(json.dumps(data))