2017-02-03 18 views
0

forループでkey:valueのペアを使用しているスクリプトを変更しようとしています。私は変更を加えなければならないので、forループは、キーの代わりに3つの値をとることができます。前もって感謝します。私はこのエラーを取得する: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二の秒を返し、それはそう、あなたのための値をフラット化しません同じレベルで4つの名前に解凍することはできません。値をもう一度開梱しながら、(その値がでなければならない、これはfileNameに直接キーをアンパック

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

:Pythonはあなただけのサブシーケンスからアンパックされる名前の周りに追加の括弧を追加し、しかし、これをサポートしています長さ3)を使用してreadPctreadhPctwritehPctを入力します。

サイドノート:潜在的に大きな一時的なlistを避けるには、itemsではなくiteritemsを使用します。 iteritemsは、一時的に大きなデータ構造を作成せずに直接dictを反復処理します。

関連する問題