python - ValueError:在测试 zip 函数时解压的值太多(预期为 3)
问题描述
我正在尝试用一个简单的脚本测试 zip 函数。这是我的代码:
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
通过 zip 功能。
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']]]
我正在尝试分配给数据,因此我想要的输出如下所示:
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)
为什么我会得到这个?
解决方案
我认为使用 adict
可能更容易
- 大概您有多个
Stacey
和Donna
,因此以下代码将允许您解压缩任意数量的案例。 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
输出
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']}
推荐阅读
- r - ggraph 节点标签大小:要么大要么非常小 - 没有中间?
- c# - 通过内部 API 或 Db 上下文查询 Hangfire?
- typescript - 如何“重建”CDK 入口点
- node.js - NodeJS:如何在从文件解析之前读取和修改缓冲区数据?
- javascript - 使用 *ngFor 动态构建手风琴
- javascript - V 9 FirebaseError:collection() 的第一个参数应为 CollectionReference、DocumentReference 或 FirebaseFirestore
- ios - 水平 ScrollView 在 SwiftUI 中在更改时垂直反弹
- reactjs - 资产文件夹 React - Public vs Src - 构建中的静态/媒体
- oracle-apex - 将 APEX_COLLECTIONS 与大型或多页表单一起使用 - APEX 21.1
- pinterest - 添加自定义文本作为 Pinterest pin 按钮的描述不起作用