Чем не вариант для словаря?
>>> d = {1: 'a', 2: 'b', 3: 'c', 0: 'z'}
>>> for k, v in list(d.iteritems()):
... if v < 'c':
... del d[k]
...
>>> d
{0: 'z', 3: 'c'}
Если словарь большой, то это плохая идея, так как выполняется его копия (и приводится к списку).
Что такое
arr, список из кортежей в элемента?
Почему не сделать так (никакого idx в списке, не понял зачем он)?
>>> l = ['a', 'b', 'c']
>>> for i, v in list(enumerate(l))[::-1]:
... if v < 'c':
... del [i]
...
>>> l
['c']
Список дополняется индексом (для каждого элемента) и выполняется обратный обход по его копии.
Если список большой, то это плохая идея, так как выполняется его копия с парой (индексом) для каждого элемента.
p.s. Это первое, что пришло в голову.
..bw