这与How to append to the end of an empty list?有关,但我还没有足够的声誉在那里发表评论,所以我在这里发布了一个新问题。在
我需要在一个空的列表中添加术语。我从以下几点开始:
Talks[eachFilename][TermVectors]=
[['paragraph','1','text'],
['paragraph','2','text'],
['paragraph','3','text']]
我想以
^{pr2}$Talks[eachFilename][SomeTermsRemoved]
开始为空。我不能指定我想要:
Talks[eachFilename][SomeTermsRemoved][0][0]='paragraph'
Talks[eachFilename][SomeTermsRemoved][0][1]='text'
Talks[eachFilename][SomeTermsRemoved][1][0]='paragraph'
等等。。。(索引器错误:列表索引超出范围)。如果我强制填充字符串,然后尝试更改它,就会得到一个字符串是不可变错误的。在
那么,如何指定我希望Talks[eachFilename][SomeTermsRemoved][0]
是['paragraph','text']
,而{
.append
可以工作,但只生成一个长列,而不是一组列表。在
更具体地说,我有许多在dict中初始化的列表
Talks = {}
Talks[eachFilename]= {}
Talks[eachFilename]['StartingText']=[]
Talks[eachFilename]['TermVectors']=[]
Talks[eachFilename]['TermVectorsNoStops']=[]
eachFilename
从文本文件列表中填充,例如:
Talks[eachFilename]=['filename1','filename2']
StartingText
有几行很长的文本(单个段落)
Talks[filename1][StartingText]=['This is paragraph one','paragraph two']
术语向量由NLTK包填充,其中包含一个术语列表,仍然分组在原始段落中:
Talks[filename1][TermVectors]=
[['This','is','paragraph','one'],
['paragraph','two']]
我想进一步操作TermVectors
,但保留原来的段落列表结构。这将创建一个每行包含一个术语的列表:
for eachFilename in Talks:
for eachTerm in range( 0, len( Talks[eachFilename]['TermVectors'] ) ):
for term in Talks[eachFilename]['TermVectors'][ eachTerm ]:
if unicode(term) not in stop_words:
Talks[eachFilename]['TermVectorsNoStops'].append( term )
结果(我失去段落结构):
Talks[filename1][TermVectorsNoStops]=
[['This'],
['is'],
['paragraph'],
['one'],
['paragraph'],
['two']]
一些持续的实验,加上这些评论,让我朝着一个解决方案前进。我没有附加每个单独的术语(生成一个长列表),而是将这些术语累积到一个列表中,然后将每个列表追加,如下所示:
谢谢大家!在
您报告的错误(字符串不可变?)除非您的列表实际上不是空的,但已经用字符串填充,否则就没有任何意义。在任何情况下,如果您从一个空列表开始,那么填充它的最简单方法是附加:
如果您有一个空列表,并尝试使用索引为其分配,则会引发错误:
^{pr2}$另外,代码如下:
与Python风格相去甚远。不要使用camelCase,使用snake_case。不要将变量大写。另外,在中级for循环中,使用}。偶数
for eachTerm in range(0, len(Talks[eachFilename]['TermVectors']
,但是eachTerm
是int
,因此使用标准i
j
或{idx
。在无论如何,没有理由让代码变成这样:
在这方面:
下面是一个可复制的例子(我为您做了这个,但是您应该在发布问题之前自己做):
更像Python的方法如下:
相关问题 更多 >
编程相关推荐