将for循环中的内容存储在列表python中

Posted

技术标签:

【中文标题】将for循环中的内容存储在列表python中【英文标题】:Storing the content from for loop in the list python 【发布时间】:2015-11-05 22:40:11 【问题描述】:

这是一个用 pyspark ipython notebook 编写的 python 程序。我正在尝试使用 for 循环计算每个 RDD(可以被视为文件)中列表“名称”中给出的单词实例的数量。我想将每个文件中一个单词的计数存储在一个与单词同名的列表中。

例如。假设第一个 RDD 中的 harry 字数为 1214,第二个 RDD 中的单词数为 1506 n,依此类推。我想创建一个列表 harryList = [1214, 1506, 1825, 2933, 3748, 2617, 2887]

名称列表是动态的。

names = ['harry', 'hermione','ron','hagrid']
rdds = [hp1RDD,hp2RDD,hp3RDD,hp4RDD,hp5RDD,hp6RDD,hp7RDD]

for n in names:
    a = []


    for x in rdds:
        a.append(x.flatMap(lambda line: line.split(" ")).filter(lambda word: word==n).count())

    print a    

使用上面的代码,我可以打印列表的内容,但无法按照上面显示的方式保存它。

【问题讨论】:

使用字典代替键是harry,值是值列表 您只需要准确的单词吗?我的意思是,你想要 hagrid 的确切出现还是将 hagrid's 算作 hagrid 将RDD转换为单词列表并使用collections.Counter 【参考方案1】:

如果你不介意:

hagrid's 这样的词将独立于 hagrid 计算

使用 collections.Counter 会有所帮助:

from collections import Counter

hp1RDD = "harry potter has a girlfriend who's name is hermione granger and a friend called ron. harry has an uncle who's name is hagrid. hagrid is a big guy"
hp2RDD = "harry potter is the best movie I've ever saw. hermione is very beautfiful"

names = ['harry', 'hermione','ron','hagrid']
rdds = [hp1RDD, hp2RDD]
results = dict()

for name in names:
    tmp_list = list()

    for rdd in rdds:
        count = Counter(rdd.split())
        tmp_list.append(count[name])
    results[name] = tmp_list

print results

另外,您可以使用不区分大小写的版本,只需使用 lower()

count = Counter([x.lower() for x in rdd.split()])

【讨论】:

以上是关于将for循环中的内容存储在列表python中的主要内容,如果未能解决你的问题,请参考以下文章

Python for 循环仅将最后一个列表作为值附加

Python列表之for循环应用

将for循环的输出写入python中的csv

在数组中存储for循环的结果

For循环正在覆盖列表中的字典值[重复]

第 4 章 操作列表