在for循环中使用键的多个值

时间:2017-02-03 03:22:56

标签: python python-2.7 iterable-unpacking

我正在尝试修改在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))

1 个答案:

答案 0 :(得分:1)

items会返回list两个tuple的密钥和值,它不会为您平整值,因此无法将其解压缩为四个名称在同一水平。 Python支持这一点,你只需要在子序列中解压缩的名称周围添加额外的括号:

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

这会将密钥直接解压缩到fileName,同时第二次解包值(因此值必须为长度3)以填充readPctreadhPctwritehPct

附注:您可能希望使用iteritems而非items来避免可能较大的临时list; iteritems将直接迭代dict,而不会创建临时的大型数据结构。