首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何解析密钥错误:4?

如何解析密钥错误:4?
EN

Stack Overflow用户
提问于 2017-10-09 11:00:36
回答 2查看 4.2K关注 0票数 2

我需要提取一个特定值的级别:这是我的out_dict:

代码语言:javascript
复制
 out_dict={'198': 2, '223': 5, '102': 7, '197': 6, '183': 9, '184': 3, '248': 1, '255': 8, '179': 10, '241': 4}

这是我的KeyBestByte

代码语言:javascript
复制
Key[BestByte]= 198

这是我的密码:

代码语言:javascript
复制
print (out_dict)
    for k in out_dict.values():
        if out_dict[k] == Key[BestByte]:
            print (k)

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-09 11:03:11

你用的是值而不是钥匙。在钥匙上循环一下。并转换为整数以进行比较:

代码语言:javascript
复制
for k in out_dict:   # same as out_dict.keys(), even slightly better
    if int(k) == Key[BestByte]:

但是,在字典的键上循环来测试某物是一种死而复生的赠品,因为有些东西可以改进:

在那种情况下你不能用这个破权力。最好这样做:

代码语言:javascript
复制
if str(Key[BestByte]) in out_dict:

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

在这种情况下,现在要获得值:

代码语言:javascript
复制
if str(Key[BestByte]) in out_dict:
    value =  out_dict[str(Key[BestByte])]

或者只是:

代码语言:javascript
复制
value = out_dict.get(str(Key[BestByte])

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

票数 0
EN

Stack Overflow用户

发布于 2017-10-09 11:19:32

首先,您的缩进似乎有点不合适,for中的所有内容都应该与上面的print语句位于相同的缩进位置。

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

代码语言:javascript
复制
for key, value in out_dict.items():
    if value == Key[BestByte]
        print(key)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46644882

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档