簡體   English   中英

ValueError:在測試 zip function 時,要解壓的值太多(預期為 3)

[英]ValueError: too many values to unpack (expected 3) while testing zip function

我正在嘗試使用簡單的腳本測試 zip function。 這是我的代碼:

list1os = [1,2,3,4,5,6,7,8,9,10]
List1is = [11,12,13]
List1name = ['Stacey']
list2os = [6,7,8,9,10,11,12,13,14,15]
List2is = [14,15,16]
List2name = ['Donna']
list3 = [3,4,5,6,7,8]

test1=[]
test2=[]
inst_chunk_of_values_id=[]

#Creating data to test
test1.append(List1is)
test1.append(list1os)
test1.append(List1name)

test2.append(List2is)
test2.append(list2os)
test2.append(List2name)

inst_chunk_of_values_id.append(test1)
inst_chunk_of_values_id.append(test2)

#trying to split up the dataset here
for chunk1,chunk2 in zip(inst_chunk_of_values_id[0],inst_chunk_of_values_id[1]):

    print(chunk1)
    os_range1,is_range1,chk_roll_id1 = chunk1
    os_range2,is_range2,_=chunk2

我正在嘗試通過inst_chunk_of_values_id function 傳遞 inst_chunk_of_values_id。

inst_chunk_of_values_id看起來像:

[[[11, 12, 13], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], ['Stacey']], [[14, 15, 16], [6, 7, 8, 9, 10, 11, 12, 13, 14, 15], ['Donna']]]

我正在嘗試分配給數據,所以我想要的 output 看起來像:

os_range1 = [11, 12, 13]
is_range1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
chk_roll_id1 = ['Stacey']

os_range2 = [14, 15, 16]
is_range2 = [6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
chk_roll_id2 = ['Donna']

但我收到以下錯誤:

    os_range1,is_range1,chk_roll_id1 = chunk1    
ValueError: too many values to unpack (expected 3)

為什么我會得到這個?

我認為使用dict可能更容易

  • 大概您擁有的不僅僅是StaceyDonna ,因此下面的代碼將允許您解壓任意數量的案例。
  • dictionaries對於創建許多變量更有用。

綜合數據

  • 擴展數據
import numpy as np

names = ['Stacey', 'Donna', 'Sam', 'Don']
np.random.seed(365)
test = {name: [list(np.random.randint(10, size=3)), list(np.random.randint(10, size=10)), [name]] for name in names}

test_zip = list(zip(*test.values()))

print(test_zip)

[([2, 4, 1], [7, 7, 0], [1, 6, 5], [0, 1, 4]),
 ([5, 2, 2, 9, 8, 4, 0, 3, 3, 7],
  [8, 4, 3, 2, 6, 2, 6, 8, 9, 6],
  [7, 7, 6, 5, 9, 3, 8, 7, 9, 9],
  [0, 9, 6, 5, 6, 9, 5, 3, 2, 7]),
 (['Stacey'], ['Donna'], ['Sam'], ['Don'])]

解壓數據

data = dict()
for i, c in enumerate(test_zip, start=1):
    if i == 1:
        for i, x in enumerate(c, start=1):
            data[f'os_range{i}'] = x
    if i == 2:
        for i, x in enumerate(c, start=1):
            data[f'is_range{i}'] = x
    if i == 3:
        for i, x in enumerate(c, start=1):
            data[f'chk_roll_id{i}'] = x

Output

print(data)

{'os_range1': [2, 4, 1],
 'os_range2': [7, 7, 0],
 'os_range3': [1, 6, 5],
 'os_range4': [0, 1, 4],
 'is_range1': [5, 2, 2, 9, 8, 4, 0, 3, 3, 7],
 'is_range2': [8, 4, 3, 2, 6, 2, 6, 8, 9, 6],
 'is_range3': [7, 7, 6, 5, 9, 3, 8, 7, 9, 9],
 'is_range4': [0, 9, 6, 5, 6, 9, 5, 3, 2, 7],
 'chk_roll_id1': ['Stacey'],
 'chk_roll_id2': ['Donna'],
 'chk_roll_id3': ['Sam'],
 'chk_roll_id4': ['Don']}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM