比较字典的键

时间:2018-05-10 07:50:08

标签: python python-3.x list dictionary

我在读完文件后生成了一本字典。所以现在我想分别评估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 :(得分: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