我在读完文件后生成了一本字典。所以现在我想分别评估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)
但它说“指数超出范围”。请帮忙
答案 0 :(得分:1)
问题是您正在迭代字典键列表,然后您尝试使用相同列表的元素索引该列表。列表索引器必须是整数。
从本质上讲,这就是您的代码尝试的内容:
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}
答案 1 :(得分:0)
变量“i”应为小写,如下所示:
if row[i] < 60