Python Django Подсчет словаря с использованием For L oop на ключ - PullRequest
1 голос
/ 12 февраля 2020

Привет, я новичок в python программировании. Мне нужно создать словарь, используя для l oop и подсчитать статус для родительского ключа

У меня есть родитель, и у каждого родителя есть много датчиков. Теперь я должен посчитать статус (вверх / вниз) каждой парентиды

Expected Results:

Device Name     Up Sensors      Down Sensors
Device-01       1               1
Device-02       2

Ниже приведен пример результата API, который я получаю:

{
"sensors": [
    {
        "objid": 3227,
        "parentid": 3222,
        "device": "Device-1",
        "sensor": "GPON 0/0/0",
        "status": "Up",
    },
    {
        "objid": 3228,
        "parentid": 3222,
        "device": "Device-1",
        "sensor": "GPON 0/0/1",
        "status": "Down",
    },
    {
        "objid": 3229,
        "parentid": 3223,
        "device": "Device-2",
        "sensor": "GPON 0/0/1",
        "status": "Up",
    },
    {
        "objid": 3230,
        "parentid": 3223,
        "device": "Device-2",
        "sensor": "GPON 0/0/2",
        "status": "Up",
    },
}

Ниже приведен мой views.py , Я умею считать все датчики. Моя проблема заключается в том, как я могу получить указанный c счет на одного родителя

def dashboard(request):

    response = requests.get('http://sample_api_url')
    data = response.json()

    all_up_sensors = 0
    all_down_sensors = 0
    all_devices = dict()
    for device in data['sensors']:
        parentid = device['parentid']

        if device['status'] == "Up":
            all_up_sensors +=1
        else:
            all_down_sensors +=1

        device_info = {
            "device" : device['device'],
            "up_sensors" : ????,
            "down_sensors" : ????,
        }
        all_devices[parentid] = device_info

    context = {
        "all_devices": all_devices,
        "all_up_sensors": all_up_sensors,
        "all_down_sensors": all_down_sensors,
    }

    return render(request, 'monitoring/dashboard.html', context)

1 Ответ

0 голосов
/ 12 февраля 2020

Используя простую итерацию.

Пример:

device_info = {}
for device in data['sensors']:
    if device['device'] not in device_info:
        device_info[device['device']] = {'up_sensors':0, 'down_sensors': 0}   #Create default dict
    if device['status']== 'Up':                             #Check if `status` is Up
        device_info[device['device']]['up_sensors'] += 1    #Increment Count
    if device['status']== 'Down':                           #Check if `status` is Down
        device_info[device['device']]['down_sensors'] += 1  #Increment Count

print(device_info)

Выход:

{'Device-1': {'down_sensors': 1, 'up_sensors': 1},
 'Device-2': {'down_sensors': 0, 'up_sensors': 2}}
...