2016-12-16 5 views
1

У меня есть следующий список кортежей:Как изменить некоторые значения списка кортежей?

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

Моя главная цель заключается в конкретно изменения значения этого кортежей: ('iphone', 'X'), ('pixel', 'X'), ('google', 'NOUN') к ('iphone', 'device'), ('pixel', 'device'), ('google', 'entity'). Таким образом, так как я заинтересован в сохранении порядка, я попытался следующие:

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

Поскольку я добавил tags['galaxy'] = 'device' это на самом деле добавить его в конец списка, как ('galaxy', 'device'). Поэтому, мой вопрос заключается в том, как я могу исправить и обновить значения для кортежей, если они существуют ?.

+0

Нужен ли используйте список кортежей? Кортежи неизменны, поэтому по дизайну я бы не использовал их, если бы знал, что они могут/будут изменены. Например, возможно, вы можете использовать словарь для хранения сопоставлений и, возможно, отдельный список, чтобы сохранить порядок ключей? – MxyL

+0

@MxyL К сожалению, да, кортежи необходимы ... Я также выясню, какова ваша идея. –

ответ

1

Используйте список понимание, чтобы восстановить список по

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

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

Это будет перезаписывать кортежи как ('iphone', 'something'), то есть сказать, что это не важно, что это во второй переменной.

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

 Смежные вопросы

  • Нет связанных вопросов^_^