我的代码中的 keyerror 1

Posted

技术标签:

【中文标题】我的代码中的 keyerror 1【英文标题】:keyerror 1 in my code 【发布时间】:2016-02-21 08:47:08 【问题描述】:

我正在编写一个函数,该函数接受字典输入并返回在该字典中具有唯一值的键列表。考虑一下,

ip = 1: 1, 2: 1, 3: 3

所以输出应该是 [3] 因为键 3 具有唯一值,该值在 dict 中不存在。

现在给定的功能有问题:

def uniqueValues(aDict):

    dicta = aDict
    dum = 0
    for key in aDict.keys():

        for key1 in aDict.keys():

            if key == key1:
                dum = 0
            else:
                if aDict[key] == aDict[key1]:
                    if key in dicta:
                        dicta.pop(key)
                    if key1 in dicta:
                        dicta.pop(key1)

    listop = dicta.keys()
    print listop
    return listop

我收到如下错误:

文件“main.py”,第 14 行,位于 uniqueValues 中 如果 aDict[key] == aDict[key1]: KeyError: 1

我哪里做错了?

【问题讨论】:

您正在修改您的字典 (dicta.pop(key)),同时迭代它会导致意外结果。 【参考方案1】:

你的主要问题是这一行:

dicta = aDict

您认为您正在制作字典的副本,但实际上您仍然只有一个字典,因此对 dicta 的操作也会更改 aDict(因此,您从 adict 中删除值,它们也会从 aDict 中删除,等等你得到你的 KeyError)。

一个解决方案是

dicta = aDict.copy()

(你也应该给你的变量更清晰的名字,让你自己更清楚你在做什么)

(编辑)另外,一种更简单的方法来做你正在做的事情:

def iter_unique_keys(d):
    values = list(d.values())
    for key, value in d.iteritems():
        if values.count(value) == 1:
            yield key

print list(iter_unique_keys(1: 1, 2: 1, 3: 3))

【讨论】:

【参考方案2】:

使用collections库中的Counter

from collections import Counter

ip = 
    1: 1,
    2: 1,
    3: 3,
    4: 5,
    5: 1,
    6: 1,
    7: 9


# Generate a dict with the amount of occurrences of each value in 'ip' dict
count = Counter([x for x in ip.values()])

# For each item (key,value) in ip dict, we check if the amount of occurrences of its value.
# We add it to the 'results' list only if the amount of occurrences equals to 1. 
results = [x for x,y in ip.items() if count[y] == 1]

# Finally, print the results list
print results

输出:

[3, 4, 7]

【讨论】:

这是执行 OP 试图做的事情的好方法,但这实际上并不能帮助他理解其代码失败的原因。 @Delgan,我不会修复他的代码。教育人们比仅仅向他们展示解决方法要好。如果他得到解决问题的答案,其他人会从该答案中受益吗?你想帮助他还是整个社区?跳出框框思考,这是一个社区。​​span> 如果你不帮助他理解代码有什么问题,即dicta = aDict不是在执行真正的复制,那么他以后会犯同样的错误,问同样的问题再次。这不仅仅是展示解决方法,而是解释和教育。这也有助于其他不了解此问题的人。提供一种替代和最优雅的方式来执行他正在尝试做的事情非常好,但这不应该是你答案的孤独部分,应该另外写。 为什么我要发布一个额外的答案,而 Emile 的一个完美地解释了这个问题并提供了另一种工作方式?...

以上是关于我的代码中的 keyerror 1的主要内容,如果未能解决你的问题,请参考以下文章

python字典日期时间作为键,keyError

KeyError:“[['','']] 中没有一个在 [columns] 中”pandas python

Tflearn KeyError [] 不在索引中

在 Pandas 中使用 groupby 函数时如何解决“keyerror”?

Kivy 1.9.0 Windows 包 KeyError: 'rthooks'

KeyError:“无法打开对象(对象'示例'不存在)”