如何在python中为列表中的每个字符串创建一个子列表?

时间:2017-07-22 23:05:12

标签: python string list sublist synonym

例如,我有这个清单:

word1 =  ['organization', 'community']

我有一个函数可以从列表中的单词中获取同义词:

from nltk.corpus import wordnet as wn

def getSynonyms(word1):
    synonymList1 = []
    for data1 in word1:
        wordnetSynset1 = wn.synsets(data1)
        tempList1=[]
        for synset1 in wordnetSynset1:
            synLemmas = synset1.lemma_names()
            for i in xrange(len(synLemmas)):
                word = synLemmas[i].replace('_',' ')
                if word not in tempList1:
                    tempList1.append(word)
        synonymList1.append(tempList1)
    return synonymList1

syn1 = getSynonyms(word1)
print syn1

这是输出:

[[u'organization', u'organisation', u'arrangement', u'system', u'administration', u'governance', u'governing body', u'establishment', u'brass', u'constitution', u'formation'], [u'community', u'community of interests', u'residential district', u'residential area', u'biotic community']]

^上面的输出显示'organization''community'的每个同义词都列在列表中。然后我降低了列表的级别:

newlist1 = [val for sublist in syn1 for val in sublist]

这是输出:

[u'organization', u'organisation', u'arrangement', u'system', u'administration', u'governance', u'governing body', u'establishment', u'brass', u'constitution', u'formation', u'community', u'community of interests', u'residential district', u'residential area', u'biotic community']

^现在所有的synset都保持相同的字符串而没有子列表。而我现在要做的是让newlist1中的所有同义词互相列入名单。我希望输出是这样的:

[[u'organization'], [u'organisation'], [u'arrangement'], [u'system'], [u'administration'], [u'governance'], [u'governing body'], [u'establishment'], [u'brass'], [u'constitution'], [u'formation'], [u'community'], [u'community of interests'], [u'residential district'], [u'residential area'], [u'biotic community']]

我正在尝试这段代码:

uplist1 = [[] for x in syn1]
uplist1.extend(syn1)
print uplist1

但结果不符合我的预期:

[[], [], [u'organization', u'organisation', u'arrangement', u'system', u'administration', u'governance', u'governing body', u'establishment', u'brass', u'constitution', u'formation'], [u'community', u'community of interests', u'residential district', u'residential area', u'biotic community']]

它显示了'organization''community'的两个空列表和两个同义词列表

如何将每个synsets字符串作为子列表?

4 个答案:

答案 0 :(得分:2)

这样的东西?

uplist1 = []
for i in syn1:
    uplist1.append([i])

编辑:

列表理解相当于:

uplist1 = [[i] for i in syn1]

答案 1 :(得分:0)

我找到了!谢谢先生。 Meow以上谁给了我灵感。

upuplist1 = []
for i in newlist1:
    upuplist1.append([i])

print upuplist1

这是我所期望的输出:

[[u'organization'], [u'organisation'], [u'arrangement'], [u'system'], [u'administration'], [u'governance'], [u'governing body'], [u'establishment'], [u'brass'], [u'constitution'], [u'formation'], [u'community'], [u'community of interests'], [u'residential district'], [u'residential area'], [u'biotic community']]

答案 2 :(得分:0)

您需要在列表理解中向[]添加括号val,以便在创建string时将list放入newlist1,例如:

newlist1 = [[val] for sublist in syn1 for val in sublist]

答案 3 :(得分:0)

只需使用列表推导并将每个项目包装在列表中:

>>> lst = [[el] for el in newlist1]
[['organization'],
 ['organisation'],
 ['arrangement'],
 ['system'],
 ['administration'],
 ['governance'],
 ['governing body'],
 ['establishment'],
 ['brass'],
 ['constitution'],
 ['formation'],
 ['community'],
 ['community of interests'],
 ['residential district'],
 ['residential area'],
 ['biotic community']]