将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中的主要内容,如果未能解决你的问题,请参考以下文章