如何从对象创建嵌套列表?

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)