So I am extracting data from a JSON file.
I am trying to pack my data in a way so a preprocessing script can use it.
preprocessing script code:
for key in split:
hist = split[key]
for text, ans, qid in hist:
Now I have an extracted dataset into a Dictionary like this:
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
So I have
this = (result,answer,i)
dic[this]=this
And when I try to replicate the original code I get the Too many values to unpack error
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)
OUTPUT:
(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
As you can see I even tried limiting the right side of the assignment but that didn't help either
and as you can see the output matches as it should for each item
hist[0]=This type of year happens once every four
hist[1]=leap
hist[2]=1175
And len(hist) returns 3 also.
Why the hell is this happening? Having hist,hist[:3],hist[0:3] has the same result, Too many values to unpack error.
What you want is
text, ans, qid = hist
print(text)
instead of
for text, ans, qid in hist:
Think about what hist
represents - it is a single tuple (because you've looked it up with key
)
That means that
for text, ans, qid in hist:
is trying to iterate through each member of the tuple and break them into those three components. So, first, it tries to act on hist[0] i.e. "This type of year...." and tries to break it into text
, ans
and qid
. Python recognises that the string could be broken up (into characters), but can't work out how to break it into those three components as there are far more characters. So it throws the Error 'Too many values to unpack'