Python 将行拆分为类别和文本

Python 将行拆分为类别和文本,python,split,Python,Split,我的列表如下所示: foo = ["neg * , This is a sentence","pos * , This is another sentence"] 我需要以这样的方式拆分句子,一个值将成为类别,neg或pos,一个值将成为句子。 我试过: for text in foo: text = text.split("*") for a,b in text: cat=a text=b 然而,我得到了一个“太多的值需要解包”,有人有想法吗

我的列表如下所示:

foo = ["neg * , This is a sentence","pos * , This is another sentence"]
我需要以这样的方式拆分句子,一个值将成为类别,
neg
pos
,一个值将成为句子。 我试过:

for text in foo:
    text = text.split("*")
    for a,b in text:
        cat=a
        text=b

然而,我得到了一个“太多的值需要解包”,有人有想法吗?

你的问题是你的循环构造得很糟糕(这是可以原谅的,因为你显然对整个事情都不熟悉)

尝试以下更安全的方法(列表理解):

现在您有了
[CAT,TEXT]
项的列表

>>> l = [p.split('*', 1) for p in foo]
>>> for cat, text in l:
    print 'cat: %s, text: %s' % (cat, text)

cat: neg , text:  , This is a sentence
cat: pos , text:  , This is another sentence

您在第二个循环中迭代字符串

for text in foo:
    text = text.split("*")
    a,b = text:
在这种情况下,将a指定给文本的第一个元素,将b指定给第二个元素。
否则,您将字符串拆分为字符,并且变量的数量与字符的数量不同。文本中a、b的行
不合适。更好的选择是
A,b=text
。前一个代码对一组对进行操作,后一个代码对单个对进行操作

应用该建议并消除冗余:

foo = ["neg * , This is a sentence","pos * , This is another sentence"]
for text in foo:
    a,b = text.split("*")
    # Now do something with 'a' and 'b'
如果您真的想重新使用
文本
变量,可以这样做:

for text in foo:
    a, text = text.split("*")
    # Now do something with 'a' and 'text'

然后,
textList
是一个文本字符串列表,
catList
是一个cat字符串列表。否则,您将无法访问所有不同的猫和文本。

您在内部循环中的赋值部分做错了。来,试试这个

lines = ["neg * , This is a sentence","pos * , This is another sentence"]
for line in lines:
    category, sentence = line.split("*", 1)

这是你的实际缩进吗?是的,是不正确的吗?对不起,澄清一下:原始缩进是你的还是Inbar编辑的?我这样问是因为Python使用缩进来替换大括号。如果缩进出错,他不可能得到“太多值而无法解包”错误。这有点误导,因为它表明
foo
包含列表,而不是字符串。而且,您的命名约定也不符合是的,这很有魅力,谢谢@Inbar Rose,谢谢大家的帮助。您正在使用Python 2吗?也许把印刷品改成蟒蛇3,如果师傅是初学者,他可能不会注意到……无论如何,这是个好办法。编辑:哦,对他有用,对不起,没有看到他的留言
textList = []
catList = []
for str in foo:
    (cat,text) = str.split('*')
    textList.append(text)
    catList.append(cat)
lines = ["neg * , This is a sentence","pos * , This is another sentence"]
for line in lines:
    category, sentence = line.split("*", 1)