【问题标题】:How to resolve the keyError:4?如何解决 keyError:4?
【发布时间】:2017-10-09 11:00:36
【问题描述】:

我需要提取特定值的排名: 这是我的 out_dict:

 out_dict={'198': 2, '223': 5, '102': 7, '197': 6, '183': 9, '184': 3, '248': 1, '255': 8, '179': 10, '241': 4}

这是我的密钥[BestByte]:

Key[BestByte]= 198

这是我的代码:

print (out_dict)
    for k in out_dict.values():
        if out_dict[k] == Key[BestByte]:
            print (k)

它给了我这个错误:KeyError: 4

【问题讨论】:

    标签: python-3.x dictionary keyerror


    【解决方案1】:

    您循环的是值,而不是键。而是在键上循环。并转换为整数进行比较:

    for k in out_dict:   # same as out_dict.keys(), even slightly better
        if int(k) == Key[BestByte]:
    

    但是在字典的键上循环来测试某些东西是一个死的赠品,可以改进一些东西:

    在这种情况下,您没有使用 dict 权力。这样做会更好:

    if str(Key[BestByte]) in out_dict:
    

    避免循环和线性搜索。现在您使用字典查找要快得多。

    在这种情况下,现在获取值:

    if str(Key[BestByte]) in out_dict:
        value =  out_dict[str(Key[BestByte])]
    

    或者只是:

    value = out_dict.get(str(Key[BestByte])
    

    并测试value is not None,以防万一密钥丢失。

    【讨论】:

    • 谢谢您的回答,但我需要提取值的排名,例如如果值 id '197 我需要显示排名 6
    【解决方案2】:

    首先,您的缩进似乎有点不对劲,for 中的所有内容都应与上述 print 语句的缩进相同。

    至于您的问题,for k in out_dict.values() 将为您提供 out_dict 中的实际值(即 2、5、7、6 等),而不是字典中的 key。因此if 逻辑将不起作用,因为k 不是out_dict 的键,从而产生您的KeyError。有几种方法可以解决这个问题,包括:

    for key, value in out_dict.items():
        if value == Key[BestByte]
            print(key)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-25
      • 1970-01-01
      • 2015-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-08
      • 2021-05-11
      相关资源
      最近更新 更多