2016-12-16 3 views
1

Ich habe die folgende Liste von Tupeln:Wie ändern Sie einige der Werte einer Liste von Tupeln?

lis = [('The', 'DET'), 
('iphone', 'X'), 
('is', 'VERB'), 
('a', 'DET'), 
('very', 'ADV'), 
('nice', 'ADJ'), 
('device', 'NOUN'), 
('.', 'PUNCT'), 
('However', 'ADP'), 
('the', 'DET'), 
('pixel', 'X'), 
('is', 'VERB'), 
('by', 'ADP'), 
('far', 'ADV'), 
('more', 'ADV'), 
('interesting', 'ADJ'), 
('since', 'ADV'), 
('it', 'PRON'), 
('was', 'AUX'), 
('made', 'VERB'), 
('by', 'ADP'), 
('google', 'NOUN'), 
('.', 'PUNCT')] 

Mein Hauptziel ist es, speziell die Werte der dieser Tupel zu ändern: ('iphone', 'X'), ('pixel', 'X'), ('google', 'NOUN')-('iphone', 'device'), ('pixel', 'device'), ('google', 'entity'). Somit kann, da ich die Reihenfolge in bewahren interessiert bin, habe ich versucht, die folgenden:

tags['Google'] = 'device' 
tags['pixel'] = 'device' 
tags['iphone'] = 'entity' 
#this one is not present in lis . Nevertheless, I would like to add it just in case I need it. 
tags['galaxy'] = 'device' 
tags = list(tags.items()) 
tags = OrderedDict(postag(str(sample))) 

Da ich tags['galaxy'] = 'device' hinzugefügt es tatsächlich ist es am Ende der Liste als ('galaxy', 'device') hinzufügen. Daher ist meine Frage, wie kann ich die Werte von für Tupel reparieren und aktualisieren, wenn sie existieren ?.

+0

Ist es notwendig, Verwenden Sie eine Liste von Tupeln? Tupel sind unveränderlich, so dass ich sie nicht verwenden würde, wenn ich wüsste, dass sie verändert werden könnten. Vielleicht können Sie zum Beispiel ein Verzeichnis verwenden, um die Zuordnungen zu speichern, und vielleicht eine separate Liste, um die Reihenfolge der Schlüssel zu behalten? – MxyL

+0

@MxyL Leider ja, Tupel sind notwendig ... Ich finde auch heraus, was deine Idee ist. –

Antwort

1

eine Liste Verständnis Verwenden Sie die Liste

tags = {'google': 'entity', 'iphone': 'device', ...} 

lis = [(a, tags[a.lower()]) if a.lower() in tags else (a, b) for a, b in lis] 

Dies wird überschrieben Tupel wie ('iphone', 'something') neu zu erstellen, dh es nicht sagen, ist es egal, was in der zweiten Variable ist.

+0

Was ist, wenn sie nicht in meinem Text existieren ?. Sind Verständnislisten ausreichend robust, um damit umzugehen und sie nicht hinzuzufügen? –

+1

Dieses Listenverständnis wird keine Werte in 'lis' setzen, die nicht schon da sind. Einige lesen auf Listen Comprehensions: https://docs.python.org/3/tutorial/datastructures.html#list-comprehensions –

+0

Ich habe: 'ValueError: zu viele Werte zu entpacken (erwartet 2)' –

1

Wenn Sie diesen Ort ändern müssen und haben bereits die Werte, die Sie brauchen, um sie mit zu ersetzen, würde ich einfach ein Wörterbuch aus dem Ersatzfeld erstellen und dann ersetzen:

rep = dict([('iphone', 'device'), ('pixel', 'device'), ('google', 'entity')]) 

for ind, (i, j) in enumerate(lis): 
    if i in rep: 
     lis[ind] = (i, rep[i]) 
Verwandte Themen