如何从python中的列表中删除非单词

时间:2015-01-26 03:08:42

标签: python

我正在我的列表上运行一个包含字典查找的函数,所以我需要删除所有非字典单词,因为如果不这样做,我会收到一个键错误。我不能只使用“继续”因为我不是在循环中这样做。我不认为我有很多,所以如果必须,我可以一个接一个地做(虽然我不愿意)。列表中的对象都是unicode,这使得删除它们变得更加困难。

我的列表如下所示:

my_list:
[[u'stuff',
  u'going',
  u'moment',
  u'mj',
  u've',
  u'started',
  u'listening',
  u'music'

等...

或者,如果我这样称呼我得到一个支架:

my_list[0]:
[u'stuff',
 u'going',
 u'moment',
 u'mj',
 u've',
 u'started',
 u'listening',
 u'music',

等...

我尝试过这样的事情:

my_list.remove("mj")

my_list.remove("u'mj'")

my_list.remove[0,3]

有什么想法吗?感谢

编辑:对凯文的回应: 这是我如何获得数据的方式

my_list = []
for review in train["review"]:
    my_list.append(review_to_wordlist(review, remove_stopwords=True))

,功能在这里:

def review_to_wordlist(review, remove_stopwords=False):
    #remove html
    review_text = BeautifulSoup(review).get_text()

#remove non-letters
#possibly update this later to include numbers?
review_text = re.sub("[^a-zA-Z]"," ", review_text)

#convert words to lower case and split
words = review_text.lower().split()

if remove_stopwords:
    stops = set(stopwords.words("english"))
    words = [w for w in words if not w in stops]

return(words)

2 个答案:

答案 0 :(得分:1)

你很亲密。问题不在于unicode,而是在外部列表上调用remove。由于您的文本列表是列表中的列表,因此您需要从中删除。

请改为:

my_list[0].remove('mj')

你也可以将它作为unicode字符串加前缀(在这种情况下结果相同):

my_list[0].remove(u'mj')

示例:

my_list = [[u'stuff',
  u'going',
  u'moment',
  u'mj',
  u've',
  u'started',
  u'listening',
  u'music'
  ]]
my_list[0].remove('mj')

print my_list

输出:

[[u'stuff', u'going', u'moment', u've', u'started', u'listening', u'music']]

请注意,字符串mj已删除。

答案 1 :(得分:1)

您提到您使用该列表进行密钥查找。

只需在代码中添加以下行,以避免产生错误:

if dict.has_key(list_item):
    # do your lookup

避免错误。