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

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

我收到如下错误:



我在哪里做错了?

最佳答案

您的主要问题是以下行:

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}))

10-07 13:03