列表中有许多重复元组

时间:2015-02-11 05:41:16

标签: python list tuples nltk

我在处理列表中的元组时遇到了麻烦。 我们假设我们的列表中包含很多元组。

simpleTag=[**('samsung', 'ADJ')**, ('user', 'NOUN'), ('huh', 'NOUN'), ('weird', 'NOUN'), (':', '.'), ('MDPai05', 'NOUN'), (':', '.'), ('Samsung', 'NOUN'), ('Electronics', 'NOUN'), ('to', 'PRT'), ('Build', 'NOUN'), ('$', '.'), ('3', 'NUM'), ('Billion', 'NUM'), ('Smartphone', 'NOUN'), ('Plant', 'NOUN'), ('in', 'ADP'), ('Vietnam', 'NOUN'), ('Why', 'NOUN'), ('not', 'ADV'), ('india', 'VERB'), ('?', '.'), ('market', 'NOUN'), ('here', 'ADV'), (':', '.'), (':', '.'), ('//t…I', 'ADJ'), ('have', 'VERB'), ('bricked', 'VERB'), ('an', 'DET'), ('android', 'ADJ'), ('samsung', 'NOUN'), ('galaxy', 'NOUN'), ('player', 'NOUN'), ('yp-g70', 'X'), ('international', 'ADJ'), ('version', 'NOUN'), (',', '.'), ('and', 'CONJ'), ('it', 'PRON'), ('is', 'VERB'), ("n't", 'ADV'), ('recognized', 'VERB'), ('by', 'ADP'), ('PC', 'NOUN'), ('an', 'DET'), ('...', '.'), (':', '.'), ('tomwicky', 'NOUN'), (':', '.'), (':', '.'), ('announces', 'NOUN'), ('partnership', 'NOUN'), ('with', 'ADP'), ('Samsung', 'NOUN'), ('for', 'ADP'), ('wallet', 'NOUN'), ('/', '.'), ('couponing', 'VERB'), ('oms14', 'NOUN'), (':', '.'), ('refrigerator', 'NOUN'), ('(', '.'), ('Spearfish', 'ADJ'), (')', 'NOUN'), ('$', '.'), ('175', 'NUM'), (':', '.'), ('refrigerator', 'NOUN'), ('samsung', 'NOUN'), ('airconditioning', 'VERB'), ('sd', 'NOUN'), ('forsale', 'NOUN'), (':', '.'), ('relaxedharry', 'NOUN'), (':', '.'), ('meanwhile', 'ADV'), ('louis', 'VERB'), ('is', 'VERB'), ('a', 'DET'), **('samsung', 'ADJ')**, ('user', 'NOUN'), ('huh', 'NOUN'), ('weird', 'NOUN'), (':', '.'), ('AmazingRoom', 'NOUN'), (':', '.'), ('if', 'ADP'), ('you', 'PRON'), ('want', 'VERB'), ('a', 'DET'), ('iPhone', 'NOUN'), ('5s', 'NUM'), ('!', '.'), ('*', 'X'), (':', '.'), ('to', 'PRT'), ('win', 'VERB'), ('a', 'DET'), ('Samsung', 'NOUN')]

我要做的是替换一些元组的值。例如在simpleTag中,有" samsung"它有两个标签:' NOUN'和' ADJ'

我要做的是取代ADJ'到" NOUN'

我已经尝试了几个代码,但我不知道为什么它会让我回复" ADJ。" 以上示例仅仅是我的代码由nltk标记的样本。 请让我知道你的想法。

代码1:

[tupleset[:1] + ('NOUN',) for tupleset in simpleTag if word.startswith('samsung')]

代码2:

for (word,tag) in simpleTag:
    if word.startswith('samsung'):
        tag = 'NOUN'

CODE3:

for (word,tag) in simpleTag:
    if word.startswith('samsung'):
        (word, tag)=(word, 'NOUN')

2 个答案:

答案 0 :(得分:5)

这是对给定代码的简单修改:

for index, (word,tag) in enumerate(simpleTag):
    if word.startswith('samsung'):
        simpleTag[index] = (word, 'NOUN')

答案 1 :(得分:1)

看来你过于复杂了。在Python中,通常有效且更容易理解列表而不是改变它

[(word, 'NOUN' if word.startswith('samsung') else tag)
 for word, tag in simpleTag]