@DrPalmer

Как правильно написать обращение к спискам из апи?

Суть в том что создается словарь со списком машин, которые нужно распределить по nodes, но на каждом из 5ти индексов nodes не должно быть повторяющихся имен машин.
ИЗ апи приходят такие машины:
#welcome-php-2.node.eu.consul
#aff-java-1.node.eu.consul
#aff-java-3.node.eu.consul
#tgbot-go-1.node.eu.consul
и тд.
def get_next_hostname(current_hostname):
    parts = current_hostname.split('-')
    index = int(parts[-1].split('.')[0])
    new_name = '{}-{}-{}.node.eu.consul'.format(parts[0], parts[1], index + 6)
    return new_name

def get_service_name(current_hostname):
    parts = current_hostname.split('-')
    service_type = '{}'.format(parts[0])
    return service_type

response = requests.get('http://127.0.0.1/asl_real.json')
asl_vms = json.loads(response.text)
groupped_vms = dict()
nodes = {1:dict(),2:dict(),3:dict(),4:dict(),5:dict()}

for vm in asl_vms:
    first_part = get_service_name(vm['name'])
    vm_res = {'first_part_name:' : first_part, 'os:' : vm['distribution']['description'],'memory:' : vm['memory'],'cpu:' : vm['cpu'],'cpuNumber:' : vm['cpuNumber'],'disk:' : vm['disk']}
    if vm[first_part] not in groupped_vms:
        groupped_vms[vm['first_part_name']] = []
    else:
        groupped_vms[vm['first_part_name']].append(vm) 

    for vm_first_part_key in groupped_vms:
        vm_group = groupped_vms[vm_first_part_key]
        if len(vm_group) == 0:
            continue
        else:
            vm = vm_group.pop()
            nodes[node][get_next_hostname(vm['name'])] = vm_res
print(json.dumps(nodes))

Подскажите почему так нельзя написать? Выдает ошибку
if vm[first_part] not in groupped_vms:
KeyError: 'welcome'

И так видимо тоже нельзя обращаться? Тоже выдает ошибку
groupped_vms[vm['first_part_name']] = []
  • Вопрос задан
  • 63 просмотра
Решения вопроса 1
@DrPalmer Автор вопроса
Нашел решение: не заметил сам, что for vm in asl_vms: на первой итерации некуда записывать машины. Добавил это: groupped_vms[first_part] = [vm] Теперь работает.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы