<p><strong>您的问题</strong></p>
<p>您确实应该包含完整的堆栈跟踪,但在这种情况下,很容易推断出<code>mylist1,mylist2,mylist3 = [searchWord(segment) for segment in text]</code>是有问题的行,因为列表理解返回的值超过3个,所以不能将它们仅分配给3个变量。但代码中的问题是,您试图<code>return</code>多次。</p>
<pre><code>return mylist1
return mylist2
return mylist3
</code></pre>
<p>一个函数只能有一个返回,因此应该将其更改为:</p>
<pre><code>return (mylist1, mylist2, mylist3)
</code></pre>
<hr/>
<p><strong>解决方案</strong></p>
<p>看了你的代码,看到了你的愿望。我帮你修好了:</p>
<pre><code>def catagorize(data):
container = [[],[],[]]
for segment in data:
searchWord(segment, container)
return container
def searchWord(segment, container):
letter, tag = segment.split('/')
if tag == 'abc':
container[0].append(letter)
elif tag == 'abd':
container[1].append(letter)
elif tag == 'xyz':
container[2].append(letter)
else:
raise ValueError('unknown tag')
</code></pre>
<p>运行代码:</p>
<pre><code>>>> text = ["A/abc","B/abd","C/abc","D/xyz"]
>>> mylist1, mylist2, mylist3 = catagorize(text)
>>> print mylist1, mylist2, mylist3
['A', 'C'] ['B'] ['D']
</code></pre>
<hr/>
<p><strong>另一个解决方案</strong></p>
<p>更强大的解决方案:</p>
<pre><code>from collections import defaultdict
def catagorize(data):
container = defaultdict(list)
for letter, tag in (segment.split('/') for segment in data):
container[tag].append(letter)
return container
</code></pre>
<p>行动中:</p>
<pre><code>>>> catagorize(["A/abc","B/abd","C/abc","D/xyz"])
defaultdict(<type 'list'>, {'xyz': ['D'], 'abc': ['A', 'C'], 'abd': ['B']})
</code></pre>