2017-02-03 33 views
0

我想修改一個在for循環中使用一對key:值的腳本。我必須進行更改,以便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返回一個二維的listtuple S中的關鍵和價值,它不壓扁你的價值,所以它不能被解壓成同一級別的四個名字。 Python支持這雖然,你只需要添加周圍已被從子解包的名稱附加括號:

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

這直接解壓鑰匙插進fileName,而拆包值第二次(這樣的值必須長度3)以填充readPct,readhPct,writehPct

附註:您可能需要使用iteritems而不是items來避免潛在的大的臨時list; iteritems將直接迭代dict而不會產生臨時的大數據結構。