python ValueError: too many values to unpack in tuple
python ValueError: too many values to unpack in tuple
所以我正在从 JSON 文件中提取数据。
我正在尝试以某种方式打包我的数据,以便预处理脚本可以使用它。
预处理脚本代码:
for key in split:
hist = split[key]
for text, ans, qid in hist:
现在我将提取的数据集放入字典中,如下所示:
dic{}
result //is the result of removing some formatting elements and stuff from the Question, so is a question string
answer //is the answer for the Q
i // is the counter for Q & A pairs
所以我有
this = (result,answer,i)
dic[this]=this
当我尝试复制原始代码时,出现了太多值无法解包的错误
for key in dic:
print(key)
hist = dic[key]
print(hist[0])
print(hist[1])
print(hist[2])
for text, ans, qid in hist[0:2]: // EDIT: changing this to hist[0:3] or hist has no effect
print(text)
输出:
(u'This type of year happens once every four', u'leap', 1175)
This type of year happens once every four
leap
1175
Traceback (most recent call last):
File "pickler.py", line 34, in <module>
for text, ans, qid in hist[0:2]:
ValueError: too many values to unpack
如您所见,我什至尝试限制作业的右侧,但这也无济于事
如您所见,每个项目的输出都匹配
hist[0]=This type of year happens once every four
hist[1]=leap
hist[2]=1175
还有 len(hist) returns 3 也。
到底为什么会这样? hist,hist[:3],hist[0:3] 有相同的结果,Too many values to unpack error.
你的循环试图做的是遍历 hist
的前三项,并将它们中的每一项单独解释为一个三元素元组。我猜你想做的是这个:
for key in dic:
hist = dic[key]
(text, ans, qid) = hist[0:3] # Might not need this slice notation if you are sure of the number of elements
print(text)
你要的是
text, ans, qid = hist
print(text)
而不是
for text, ans, qid in hist:
想想 hist
代表什么——它是一个元组(因为你已经用 key
查过了)
也就是说
for text, ans, qid in hist:
正在尝试遍历元组的每个成员并将它们分解为这三个部分。因此,首先,它尝试作用于 hist[0],即 "This type of year....",并尝试将其分解为 text
、ans
和 qid
。 Python 认识到字符串可以被分解(分解成字符),但无法弄清楚如何将它分解成这三个部分,因为有更多的字符。所以它抛出错误 'Too many values to unpack'
改变这个:
for text, ans, qid in hist[0:2]:
对此:
for text, ans, qid in hist[0:3]:
hist[x:y] 是 hist 中 x <= ids < y 的所有元素
编辑:
正如@J Richard Snape 和@rchang 所指出的,你不能使用这个:
for text, ans, qid in hist[0:3]:
但您可以改用它(对我有用):
for text, ans, qid in [hist[0:3]]:
所以我正在从 JSON 文件中提取数据。
我正在尝试以某种方式打包我的数据,以便预处理脚本可以使用它。
预处理脚本代码:
for key in split:
hist = split[key]
for text, ans, qid in hist:
现在我将提取的数据集放入字典中,如下所示:
dic{}
result //is the result of removing some formatting elements and stuff from the Question, so is a question string
answer //is the answer for the Q
i // is the counter for Q & A pairs
所以我有
this = (result,answer,i)
dic[this]=this
当我尝试复制原始代码时,出现了太多值无法解包的错误
for key in dic:
print(key)
hist = dic[key]
print(hist[0])
print(hist[1])
print(hist[2])
for text, ans, qid in hist[0:2]: // EDIT: changing this to hist[0:3] or hist has no effect
print(text)
输出:
(u'This type of year happens once every four', u'leap', 1175)
This type of year happens once every four
leap
1175
Traceback (most recent call last):
File "pickler.py", line 34, in <module>
for text, ans, qid in hist[0:2]:
ValueError: too many values to unpack
如您所见,我什至尝试限制作业的右侧,但这也无济于事
如您所见,每个项目的输出都匹配
hist[0]=This type of year happens once every four
hist[1]=leap
hist[2]=1175
还有 len(hist) returns 3 也。
到底为什么会这样? hist,hist[:3],hist[0:3] 有相同的结果,Too many values to unpack error.
你的循环试图做的是遍历 hist
的前三项,并将它们中的每一项单独解释为一个三元素元组。我猜你想做的是这个:
for key in dic:
hist = dic[key]
(text, ans, qid) = hist[0:3] # Might not need this slice notation if you are sure of the number of elements
print(text)
你要的是
text, ans, qid = hist
print(text)
而不是
for text, ans, qid in hist:
想想 hist
代表什么——它是一个元组(因为你已经用 key
查过了)
也就是说
for text, ans, qid in hist:
正在尝试遍历元组的每个成员并将它们分解为这三个部分。因此,首先,它尝试作用于 hist[0],即 "This type of year....",并尝试将其分解为 text
、ans
和 qid
。 Python 认识到字符串可以被分解(分解成字符),但无法弄清楚如何将它分解成这三个部分,因为有更多的字符。所以它抛出错误 'Too many values to unpack'
改变这个:
for text, ans, qid in hist[0:2]:
对此:
for text, ans, qid in hist[0:3]:
hist[x:y] 是 hist 中 x <= ids < y 的所有元素
编辑:
正如@J Richard Snape 和@rchang 所指出的,你不能使用这个:
for text, ans, qid in hist[0:3]:
但您可以改用它(对我有用):
for text, ans, qid in [hist[0:3]]: