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

时间:2016-04-23 01:04:57

标签: python python-2.7 object nested-lists

我有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的每个列表?

1 个答案:

答案 0 :(得分:4)

这是一个元素的列表(另一个列表)。

[[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)