Проблема в том, что вы перебираете список ключей словаря, а затем пытаетесь проиндексировать этот список с элементами того же списка . Индекс списка должен быть целым числом.
По сути, это то, что пытается сделать ваш код:
lst = [10, 20, 30]
# this will fail on the first element, lst[10] does not exist
for i in [10, 20, 30]:
if lst[i]:
Вместо этого вы можете выполнять итерацию в диапазоне, определяемом длиной списка:
line = 'this is a test'
num = 0
result = {}
for text in line:
char = ord(text)
num += 1
if char in result:
result[char].add(num)
else:
result[char] = set()
result[char].add(num)
row = list(result.keys())
print(result)
# {32: {5, 8, 10},
# 97: {9},
# 101: {12},
# 104: {2},
# 105: {3, 6},
# 115: {4, 7, 13},
# 116: {1, 11, 14}}
for i in range(len(row)):
if row[i] < 60:
print(row[i], result[row[i]])
# 32 {8, 10, 5}
Вы можете реализовать эту логику более эффективно, используя словарь. Очень редко требуется составить явный список из ключей вашего словаря.
res = {k: v for k, v in result.items() if k < 60}