Поможет ли гнездовой цикл в анализе результатов - PullRequest
0 голосов
/ 13 февраля 2019

Я пытаюсь получить информацию из двух разных словарей.(извините, потому что я в буквальном смысле взломан, чтобы понять.)

У меня есть цикл for, который дает мне имя vmname.У меня есть другой цикл for, который дает мне другую информацию, такую ​​как «replicationid».

Я мог бы сделать очень большое предположение здесь, но эй, плохо начну там.что я хочу сделать, чтобы интегрировать для цикла 1 и для цикла 2. как результат, как это, возможно ли это?

начальный вывод для цикла loop1, который я могу получить: vma vmb vmc

начальный вывод for loop2, который я могу получить: задание репликации 1 задание репликации 2 задание репликации 3

желаемые результаты:

задание репликации vma 1 задание репликации vmb 2 задание репликации vmc3

def get_replication_job_status():
    sms = boto3.client('sms')
    resp = sms.get_replication_jobs()
    #print(resp)

    things = [(cl['replicationJobId'], cl['serverId']) for cl in 
    resp['replicationJobList']]
    thangs = [cl['vmServer'] for cl in resp['replicationJobList']]

    for i  in thangs:
        print()
        print("this is vm " + (i['vmName']))
        print("this is the vm location " + (i['vmPath']))
        print("this is the vm address, " +(str(i['vmServerAddress'])))
        for j in things:
            print("The Replication ID is : " +(str(j[0])))

снова хочу: задание репликации vma 1 задание репликации vmb 2 задание репликации vmc 3

я получаю:

задание репликации vma 1 задание репликации 2 репликациязадание 3 vmb задание репликации 1 задание репликации 2 задание репликации 3 .. .. ..

1 Ответ

0 голосов
/ 13 февраля 2019

Если вы уверены, что ваши списки имеют одинаковую длину, вам потребуется встроенная в Python функция zip :

for thing, thang in zip(things, thangs):
    print()
    print(thing)
    print(thang)

Но если один из списковчем больше другого, то zip обрезает оба списка, чтобы иметь длину, равную самой короткой, например:

>>> for i, j in zip(range(3), range(5)):
...    print(i, j)
...
(0, 0)
(1, 1)
(2, 2)

UPD:

Вы также можете распаковать свои кортежи прямо в for определении цикла, так что каждый элемент (они являются 2-кортежами) в списке things сохраняется в две переменные:

for (replicationJobId, serverId), thang in zip(things, thangs):
    print()
    print(replicationJobId)
    print(serverId)
    print(thang)

UPD 2:

Почему вы разделяете resp на два списка?

def get_replication_job_status():
    sms = boto3.client('sms')
    resp = sms.get_replication_jobs()
    #print(resp)

    for replication_job in resp['replicationJobList']:
        vm_server = replication_job['vmServer']

        print()
        print("this is vm:", vm_server['vmName'])
        print("this is the vm location:", vm_server['vmPath'])
        print("this is the vm address:", vm_server['vmServerAddress'])
        print("The Replication ID is :", replication_job['replicationJobId'])
...