2017-02-03 14 views
0

Я пытаюсь изменить скрипт, в котором используется пара ключей: значение в цикле for. Я должен внести изменения, так что цикл for может принимать 3 значения для ключа, а не только 1. Не уверен, как это сделать. Заранее спасибо. Я получаю эту ошибку:, используя несколько значений ключа в цикле for

for fileName,readPct,readhPct,writehPct in hpct_file_list.items(): 
    ... 

ValueError: need more than 2 values to unpack 

Вот это код:

hpct_file_list = {'rhpct_50_80_20_tier2': ['80', '50', '0'], 'whpct_50_20_80_tier2': ['20', '0', '50']} 

for fileName,readPct,readhPct,writehPct in hpct_file_list.items(): 
    hostRoot.VmExec("cd C:\\Program Files (x86)\\vdbench") 
    VmCommon.LogMsg('Creating File : %s '%(fileName)) 
    hostRoot.VmExec("echo validate=yes > %s"%(fileName)) 
    hostRoot.VmExec("echo sd=sda, lun=%s, threads=16, hitarea=25m, size=875G >> %s" %(device_name, fileName)) 
    hostRoot.VmExec("echo wd=wd1, sd=sda, xfersize=512, rdpct=%s, rhpct=%s, whpct=%s, seekpct=random >> %s" % (readPct, readhPct, writehPct, fileName)) 
    hostRoot.VmExec("echo wd=wd2, sd=sda, xfersize=1k, rdpct=%s, rhpct=%s, whpct=%s, seekpct=random >> %s" % (readPct, readhPct, writehPct, fileName)) 

ответ

1

items возвращает набор list двух- tuple х ключа и значения, не придавить значение для вас, так он не может быть распакован на четыре имени на одном уровне. Python поддерживает это, хотя, вы просто добавить дополнительные скобки вокруг имен, которые должны быть распакованы из подпоследовательности:

for fileName, (readPct, readhPct, writehPct) in hpct_file_list.items(): 

Это распаковывает ключ непосредственно в fileName, при распаковке значению во второй раз (так что значения должны быть длина 3) для заполнения readPct, readhPct, writehPct.

Сторона Примечание: Возможно, вы захотите использовать iteritems, а не items, чтобы избежать потенциально значительного временного list; iteritems будет выполнять итерацию dict, не создавая временных больших структур данных.