Вот одно решение, включающее изменение элементов на месте.
def replace(list_, key, new_value):
for i, (current_key, current_value) in enumerate(list_):
if current_key == key:
list_[i] = (key, new_value)
Или, чтобы добавить, если его там нет,
def replace_or_append(list_, key, new_value):
for i, (current_key, current_value) in enumerate(list_):
if current_key == key:
list_[i] = (key, new_value)
break
else:
list_.append((key, new_value))
Использование:
>>> my_list = [('a', 'b'), ('c', 'd')]
>>> replace(my_list, 'a', 'B')
>>> my_list
[('a', 'B'), ('c', 'd')]
Если вы хотите создать новый список, понимание списка проще всего.
>>> my_list = [('a', 'b'), ('c', 'd')]
>>> find_key = 'a'
>>> new_value = 'B'
>>> new_list = [(key, new_value if key == find_key else value) for key, value in my_list]
>>> new_list
[('a', 'B'), ('c', 'd')]
И если вы хотите добавить его, если его там нет,
>>> if len(new_list) == len(my_list):
... new_list.append((find_key, new_value))
(Обратите внимание, что я изменил имя вашей переменной с l
; l
слишком легко спутать с I
и 1
, и его лучше избегать. Поэтому говорит PEP8, и я с ним согласен.)