Одно возможное исправление.
Передача списка задач (list of dict) в качестве параметра, поэтому он мутирует:
TodoList=[{'ID':5,'TodoItem':'walk','isDone':False}, {'ID':6,'TodoItem':'talk','isDone':True}]
def RemoveItem(ID, TodoList):
if not any(todoItem['ID'] == ID for todoItem in TodoList):
print('item does not exist');
else:
for item in TodoList:
if item['ID']== ID: TodoList.remove(item)
RemoveItem(5, TodoList)
print(TodoList)
#=> [{'ID': 6, 'TodoItem': 'talk', 'isDone': True}]
Чтобы ваше решение работало, вам нужно вернуть:
def RemoveItem(ID, TodoList):
if not any(todoItem['ID'] == ID for todoItem in TodoList):
return 'item does not exist';
else:
return list(filter(lambda todoItem:todoItem['ID']!= ID, TodoList))
print(RemoveItem(5, TodoList))
#=> [{'ID': 6, 'TodoItem': 'talk', 'isDone': True}]
Это потому, что строка list(filter(lambda todoItem:todoItem['ID']!= ID, TodoList))
не изменяет список, она извлекает элементы на основе условия.
Но лучше вернуть сам список, если естьнет элемента для удаления, вместо возврата строки.