2016-12-16 3 views
1

私はタプルの次のリストを持っている:('iphone', 'device'), ('pixel', 'device'), ('google', 'entity')('iphone', 'X'), ('pixel', 'X'), ('google', 'NOUN')タプルのリストの値を変更するにはどうすればよいですか?

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

私の主な目的は、特にこのタプルの値を変更することです。私はそれが実際に('galaxy', 'device')として、リストの最後に追加されtags['galaxy'] = 'device'を追加

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

ので:私は順序を保持に興味を持っていますので、このように、私は、次の試してみました。したがって、私の質問はどのように修正し、それらが存在する場合、タプルの値を更新できますか?

+0

はにそれが必要ですタプルのリストを使用しますか?タプルは不変なので、設計上、私はそれらが変更される可能性があると分かっていれば使用しません。たとえば、辞書を使用してマッピングを格納したり、キーの順序を保持するための別のリストを使用することができます。 – MxyL

+0

@MxyLはい、タプルが必要です...私はあなたのアイデアを理解しています。 –

答えて

1

これは('iphone', 'something')のようなタプルを上書きするリスト

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

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

を再構築するために、リスト内包表記を使用して、それはそれは第二の可変に何があるか気にしていないと言うことです。あなたはこれを変更する必要がある場合

+0

テキストにテキストが含まれていないとどうなりますか?理解力リストは、これを処理して追加するのに十分なほど堅牢ですか? –

+1

このリストの理解では、 'lis'にはまだ値がありません。リスト内包表記に関するいくつかの読書:https://docs.python.org/3/tutorial/datastructures.html#list-comprehensions –

+0

私は:ValueError:アンパックする値が多すぎる(予想2)。 –

1

場所で、すでにあなたがそれらを交換する必要がある値を持って、私は単純に交換用のフィールドのうちの辞書を作成し、置き換えたい:

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

for ind, (i, j) in enumerate(lis): 
    if i in rep: 
     lis[ind] = (i, rep[i]) 
関連する問題