我正在尝试修改在for循环中使用一对key:value的脚本。我必须进行更改,因此for循环可以为键而不是1取3个值。不确定如何去做。提前致谢。我收到这个错误:
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))
答案 0 :(得分: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
,而不会创建临时的大型数据结构。