2017-07-22 2 views
0

zum Beispiel ich diese Liste haben:Wie erstellt man eine Unterliste für jeden String in einer Liste in Python?

word1 = ['organization', 'community'] 

Und ich habe eine Funktion ein, um Synonyme aus den Worten der Liste zu erhalten:

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 

und hier ist die Ausgabe:

[[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']] 

^Die obige Ausgabe zeigt, dass alle Synsets für 'organization' und 'community' in einer Liste untergelistet sind. und dann verringere ich die Ebene der Liste:

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

und hier ist die Ausgabe:

[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'] 

^jetzt alle Synsets bleiben die gleichen Saiten ohne sublist. und was ich versuche, ist jetzt, alle Synsets in newlist1 einander unterzulisten. Ich erwarte, dass der Ausgang so sein würde:

[[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']] 

ich diesen Code bin versucht:

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

aber die Ergebnisse nicht das, was ich erwartet hatte:

[[], [], [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']] 

Es zeigt zwei leeren Listen und zwei Listen von Synsets für beide 'organization' und 'community'

wie ma ke jeder String von Synsets eine Unterliste?

Antwort

2

Etwas wie das?

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

EDIT:

Und die Liste Verständnis äquivalent:

uplist1 = [[i] for i in syn1] 
+0

Es tut mir leid, Sir, nicht so."[Organisation], Organisation, Organisation, System, Verwaltung, Governance, Körperbau, "Konstitution", "Information"], ["Gemeinschaft", "Gemeinschaft der Interessen", "Wohnviertel", "Wohngebiet", "Biozielle Gemeinschaft"]] << << fügt eine Liste für die synset-Gruppe hinzu, aber nicht für jede Zeichenkette – sang

0

ich es gefunden! Danke an Herrn. Meow oben, wer gab mir Inspiration.

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

print upuplist1 

hier ist der Ausgang, was ich erwartet hatte:

[[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']] 
+0

Ich implementiere es für die Liste ''newlist1'' – sang

0

Sie müssen Klammern []-val in Ihrer Liste-Verständnis fügen jedes string in einem list setzen, wenn newlist1, zum Beispiel zu erstellen:

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

@ChristianDean Warum sollte das gemacht werden, wenn man' newlist1' erstellt? –

+0

Ah, ich entschuldige mich. Ich habe nicht bemerkt, dass du auch _flattening_ 'syn1' bist und nicht nur darüber iterierst. –

0

Verwenden Sie einfach ein Listenverständnis und wickeln Sie jedes Element in eine Liste:

>>> 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']] 
Verwandte Themen