Сравнение ключей словаря - PullRequest
0 голосов
/ 10 мая 2018

Я сгенерировал словарь после прочтения файла. Так что теперь я хочу отдельно оценить ключи от ditionary, сравнить их с точки зрения. Я сравниваю только символы ascii и берут только те, которые могут быть меньше 60. Например

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

Вот что меня достало.

Я пытался

    for i in row:
        if row[I] < 60:
          print(result)

Но там написано "индекс вне диапазона". Пожалуйста, помогите

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

Проблема в том, что вы перебираете список ключей словаря, а затем пытаетесь проиндексировать этот список с элементами того же списка . Индекс списка должен быть целым числом.

По сути, это то, что пытается сделать ваш код:

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}
0 голосов
/ 10 мая 2018

переменная "i" должна быть в нижнем регистре, например:

if row[i] < 60
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...