将数据加载到字典中

时间:2014-07-15 13:51:39

标签: python

我参加了Coursera的数据科学课程,并完成了其中一项任务,这使我编写了这段代码。

import sys
import json
import re

def lines(fp):
    print str(len(fp.readlines()))

def main():
        tweet_file = open(sys.argv[1])
        word_frequency_count = {}

        for line in tweet_file:
                raw_data = json.loads(line)
                #print raw_data
                text = raw_data.get('text', "").lower().encode('utf-8')
                new_text=re.findall(r"[\w']+", text)
                print new_text
                #print text
        for word in new_text:
                word_frequency_count[word] = 'Test'

        print word_frequency_count.items()


if __name__ == '__main__':
    main()

new_text的print语句输出这些行,并且有数千个这样的结果只是给这个样本。

['rt', 'fuadagus2', 'presiden', 'sby', 'belilah', 'nuklir', 'kpd', 'korut', 'luncurkan', 'ke', 'israel', 'tunjukan', 'kalau', 'kamu', 'islam', 'prayforgaza']
['not', 'letting', 'nothing', 'else', 'get', 'in', 'my', 'way']

困扰我的是字典键值对的最后一次打印,它只输出5个键值对。我是一名Java开发人员,这是我第一次涉足python,我错过了这里显而易见的事情吗?

2 个答案:

答案 0 :(得分:1)

第二个for循环

for word in new_text

位于主循环之外(循环遍历文件中的行)。这意味着它只会在主循环结束后执行一次。此时,new_text将只包含最后一行的单词。

尝试在主循环中移动第二个循环..

答案 1 :(得分:1)

你的缩进是错误的:

for line in tweet_file:
    ...
for word in new_text:
    word_frequency_count[word] = 'Test'

第二个循环在外部第一个循环发生,因此只处理new_text中{0}}的line列表。它应该是:

tweet_file

然而,请注意Python附带“包含电池”;在这种情况下,collections.Counter会让您的生活更轻松。