首页 > 解决方案 > 比较字典的键

问题描述

我在阅读文件后生成了一本字典。所以现在我想单独评估字典的键,用 . 我比较的是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)

但它说“索引超出范围”。请帮忙

标签: pythonpython-3.xlistdictionary

解决方案


问题是您正在遍历字典键列表,然后您尝试使用相同 list 的元素对该列表进行索引。列表索引器必须是整数。

本质上,这就是您的代码所尝试的:

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}

推荐阅读