在python列表中操作字符串

时间:2015-04-22 01:22:20

标签: python

我有一个推文列表,这些推文被分组到列表中的推文块中,如下所示:

[[tweet1, tweet2, tweet3],[tweet4,tweet5,tweet6],[tweet7, tweet8, tweet9]]

我想计算每个子组中每个单词的出现次数。为此,我需要将每条推文分成单个单词。我想使用与str.split类似的东西(''),但收到错误:

AttributeError: 'list' object has no attribute 'split' 

有没有办法将每条推文分成单独的单词?结果应该类似于:

[['word1', 'word2', 'word3', 'word2', 'word2'],['word1', 'word1', 'word3', 'word4', 'word5'],['word1', 'word3', 'word3', 'word5', 'word6']]

5 个答案:

答案 0 :(得分:6)

如果你有一个字符串列表

tweets = ['a tweet', 'another tweet']

然后你可以使用列表推导来分割每个元素

split_tweets = [tweet.split(' ')
                for tweet in tweets]

因为它是推文列表的列表:

tweet_groups = [['tweet 1', 'tweet 1b'], ['tweet 2', 'tweet 2b']]
tweet_group_words = [[word
                      for tweet in group
                      for word in tweet.split(' ')]
                     for group in tweet_groups]

这将列出单词列表。

如果您想计算不同的字词,

words = [set(word 
             for tweet in group
             for word in tweet.split(' '))
         for group in tweet_groups]

答案 1 :(得分:1)

你想要这样的东西:

l1 = [['a b', 'c d', 'e f'], ['a b', 'c d', 'e f'], ['a b', 'c d', 'e f']]

l2 = []
for i,j in enumerate(l1):
    l2.append([])
    for k in j:
        l2[i].extend(k.split())

print(l2)

DEMO

答案 2 :(得分:1)

groups = [["foo bar", "bar baz"], ["foo foo"]]
[sum((tweet.split(' ') for tweet in group), []) for group in groups]
# => [['foo', 'bar', 'bar', 'baz'], ['foo', 'foo']]
编辑:似乎需要一个解释。

  • 对于每个小组[... for group in groups]

    • 对于每条推文,请分为单词(tweet.split(' ') for tweet in group)
    • 连接拆分推文sum(..., [])

答案 3 :(得分:1)

如果您想对事件进行计数,请使用Counter字典,在分割后将所有字词与itertools.chain相关联。

from collections import Counter
from itertools import chain

tweets  = [['foo bar', 'foo foobar'], ['bar foo', 'bar']]
print([Counter(chain.from_iterable(map(str.split,sub)))  for sub in tweets] )
[Counter({'foo': 2, 'foobar': 1, 'bar': 1}), Counter({'bar': 2, 'foo': 1})]

答案 4 :(得分:0)

您可以创建一个将列表传递给的函数,该函数将汇总并返回单词的字典以及它们在您的推文中显示的次数。

def countWords(listitem):
    a = []
    for x in listitem:
        for y in x:
            for z in y.split(' '):
                a.append(z)
    b = {}
    for word in a:
        if word not in b:
            b[word] = 1
        else:
            b[word] += 1
    return b

这样您就可以保留列表并将返回值分配回新变量进行检查。

dictvar = countWords(listoftweets)

创建一个定义将允许您将其放在自己的文件中,以后可以随时导入该文件。