2017-02-03 7 views
0

for 루프에서 key : value 쌍을 사용하는 스크립트를 수정하려고합니다. 나는 for 루프가 단지 1 대신 key에 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이 키와 값의 list 2 차원의 tuple의를 반환합니다, 그렇게 당신을 위해 값을 평평하지 않습니다 같은 레벨에있는 네 개의 이름으로 풀 수는 없습니다. 값을 한 번 풀고있는 동안 (그래서 값이 있어야합니다,이 fileName에 직접 키를 압축을 풉니 다

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

: 파이썬은 그냥 서브에서 압축 해제 할 수있는 이름을 주위에 추가 괄호를 추가,하지만이 지원 길이 3) readPct, readhPct, writehPct을 채 웁니다.

사이드 노트 : 잠재적으로 큰 임시 list을 피하려면 items 대신 iteritems을 사용하는 것이 좋습니다. iteritems은 임시 큰 데이터 구조를 만들지 않고 직접 dict을 반복합니다.