如何从对象创建嵌套列表?
How to create a nested list from an object?
我有一个来自 treetagger's python 包装器的标签对象,显然是列表:
In:
print type (tags)
Out:
<type 'list'>
当我打印 tags
的内容如下时,我得到以下列表:
In:
def postag_directory(input_directory, output_directory):
import codecs, treetaggerwrapper, glob, os
for filename in sorted(glob.glob(os.path.join(input_directory, '*.txt'))):
with codecs.open(filename, encoding='utf-8') as f:
lines = [f.read()]
#print 'lines:\n',lines
tagger = treetaggerwrapper.TreeTagger(TAGLANG = 'en')
tags = tagger.TagText(lines)
print '\n\n**** labels:****\n\n',tags
Out:
[[u'I\tPP\tI', u'am\tVBP\tbe', u'an\tDT\tan', u'amateur\tJJ\tamateur']]
[[u'This\tDT\tthis', u'my\tPP$\tmy']]
[[u'was\tVBD\tbe', u'to\tTO\tto', u'be\tVB\tbe', u'my\tPP$\tmy', u'camera\tNN\tcamera', u'for\tIN\tfor', u'long-distance\tJJ\tlong-distance', u'backpacking\tNN\tbackpacking', u'trips\tNNS\ttrip', u'.\tSENT\t.', u'It\tPP\tit']]
但是,我只想得到一个这样的嵌套列表:
[[u'I\tPP\tI', u'am\tVBP\tbe', u'an\tDT\tan', u'amateur\tJJ\tamateur'],[u'This\tDT\tthis', u'my\tPP$\tmy'],[u'was\tVBD\tbe', u'to\tTO\tto', u'be\tVB\tbe', u'my\tPP$\tmy', u'camera\tNN\tcamera', u'for\tIN\tfor', u'long-distance\tJJ\tlong-distance', u'backpacking\tNN\tbackpacking', u'trips\tNNS\ttrip', u'.\tSENT\t.', u'It\tPP\tit']]
我已经准备好尝试使用 list()
、append()
、[]
以及:
for sublist in [item]:
new_list = []
new_list.append(sublist)
print new_list
知道如何嵌套 tags
中的每个列表吗?
这是一个元素的列表(另一个列表)。
[[u'I\tPP\tI', u'am\tVBP\tbe', u'an\tDT\tan', u'amateur\tJJ\tamateur']]
所以如果 item
是一个列表的列表,每个列表都有一个元素,那么你可以
new_list = [sublist[0] for sublist in item]
如果每个子列表中有一个以上的元素,那么您将需要另一个嵌套循环。
不过,实际上您不应该使用 lines = [f.read()]
。当您使用 tag_text
时,文档使用单个字符串,因此从这个
开始
# Initialize one tagger
tagger = treetaggerwrapper.TreeTagger(TAGLANG='en')
# Loop over the files
all_tags = []
for filename in sorted(glob.glob(os.path.join(input_directory, '*.txt'))):
with codecs.open(filename, encoding='utf-8') as f:
# Read the file
content = f.read()
# Tag it
tags = tagger.tag_text(content)
# add those tags to the master tag list
all_tags.append(tags)
print(all_tags)
我有一个来自 treetagger's python 包装器的标签对象,显然是列表:
In:
print type (tags)
Out:
<type 'list'>
当我打印 tags
的内容如下时,我得到以下列表:
In:
def postag_directory(input_directory, output_directory):
import codecs, treetaggerwrapper, glob, os
for filename in sorted(glob.glob(os.path.join(input_directory, '*.txt'))):
with codecs.open(filename, encoding='utf-8') as f:
lines = [f.read()]
#print 'lines:\n',lines
tagger = treetaggerwrapper.TreeTagger(TAGLANG = 'en')
tags = tagger.TagText(lines)
print '\n\n**** labels:****\n\n',tags
Out:
[[u'I\tPP\tI', u'am\tVBP\tbe', u'an\tDT\tan', u'amateur\tJJ\tamateur']]
[[u'This\tDT\tthis', u'my\tPP$\tmy']]
[[u'was\tVBD\tbe', u'to\tTO\tto', u'be\tVB\tbe', u'my\tPP$\tmy', u'camera\tNN\tcamera', u'for\tIN\tfor', u'long-distance\tJJ\tlong-distance', u'backpacking\tNN\tbackpacking', u'trips\tNNS\ttrip', u'.\tSENT\t.', u'It\tPP\tit']]
但是,我只想得到一个这样的嵌套列表:
[[u'I\tPP\tI', u'am\tVBP\tbe', u'an\tDT\tan', u'amateur\tJJ\tamateur'],[u'This\tDT\tthis', u'my\tPP$\tmy'],[u'was\tVBD\tbe', u'to\tTO\tto', u'be\tVB\tbe', u'my\tPP$\tmy', u'camera\tNN\tcamera', u'for\tIN\tfor', u'long-distance\tJJ\tlong-distance', u'backpacking\tNN\tbackpacking', u'trips\tNNS\ttrip', u'.\tSENT\t.', u'It\tPP\tit']]
我已经准备好尝试使用 list()
、append()
、[]
以及:
for sublist in [item]:
new_list = []
new_list.append(sublist)
print new_list
知道如何嵌套 tags
中的每个列表吗?
这是一个元素的列表(另一个列表)。
[[u'I\tPP\tI', u'am\tVBP\tbe', u'an\tDT\tan', u'amateur\tJJ\tamateur']]
所以如果 item
是一个列表的列表,每个列表都有一个元素,那么你可以
new_list = [sublist[0] for sublist in item]
如果每个子列表中有一个以上的元素,那么您将需要另一个嵌套循环。
不过,实际上您不应该使用 lines = [f.read()]
。当您使用 tag_text
时,文档使用单个字符串,因此从这个
# Initialize one tagger
tagger = treetaggerwrapper.TreeTagger(TAGLANG='en')
# Loop over the files
all_tags = []
for filename in sorted(glob.glob(os.path.join(input_directory, '*.txt'))):
with codecs.open(filename, encoding='utf-8') as f:
# Read the file
content = f.read()
# Tag it
tags = tagger.tag_text(content)
# add those tags to the master tag list
all_tags.append(tags)
print(all_tags)