python - 太多值无法在python中解压缩?

标签 python list error-handling

我的文字如下:

text = ["A/abc","B/abd","C/abc","D/xyz"]

我想要的输出是
 mylist1 = ["A","C"]
 mylist2 = ["B"]
 mylist3 = ["D"]

我要查找的唯一标签是“/abc”和“/abd”

现在我拥有的是:
def searchWord(segment):
    word_tag = segment.split('/')

    if re.finditer('ab',word_tag[1]):
        if re.finditer('abc',word_tag[1]):
            letter = word_tag[0]
            mylist1 = letter
        else:
            letter = word_tag[0]
            mylist2 = letter
    else:
        letter = word_tag[0]
        mylist3 = letter

    return mylist1
    return mylist2
    return mylist3

mylist1,mylist2,mylist3 = [searchWord(segment) for segment in text]

似乎工作正常,但抛出异常:
 ValueError: too many values to unpack.

我的“文本”列表很大,这可能是问题吗?在为此过程构建函数之前,我没有这个问题。

谢谢!

最佳答案

您的问题

您确实应该包括完整的堆栈跟踪,但是在这种情况下,很容易推断出mylist1,mylist2,mylist3 = [searchWord(segment) for segment in text]是有问题的行,因为list-comprehension返回的值超过3,所以不能将它们仅分配给3个变量。但是代码中的问题是,您尝试多次return

return mylist1
return mylist2
return mylist3

一个函数只能有1个返回值,因此应将其更改为:
return (mylist1, mylist2, mylist3)

解决方案

在查看您的代码并看到您的需求之后。我为您修复了:
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')

运行代码:
>>> text = ["A/abc","B/abd","C/abc","D/xyz"]
>>> mylist1, mylist2, mylist3 = catagorize(text)
>>> print mylist1, mylist2, mylist3 
['A', 'C'] ['B'] ['D']

另一个解决方案

一个更强大的解决方案:
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

实际上:
>>> catagorize(["A/abc","B/abd","C/abc","D/xyz"])
defaultdict(<type 'list'>, {'xyz': ['D'], 'abc': ['A', 'C'], 'abd': ['B']})

关于python - 太多值无法在python中解压缩?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19248278/

相关文章:

python - lxml xsi :schemaLocation namespace URI validation issue

python - 将数据框列转换为 float

python - 如何在字典中生成值的有序线性组合?

tcp - 如何确定我是否需要来自 Rust io::Error 的新 TCP 连接?

python - 为什么 from __future__ import * 会引发错误?

python - 如何计算转移概率

python - 有没有更好的方法来按其属性之一拆分对象?

python - 列表不改组 python

error-handling - BASIC收到 “expected end of line”错误

ruby-on-rails - Rails/Ajax/错误处理