keyerror 1 in my code

I am writing a function that take dictionary input and return list of keys which have unique values in that dictionary. Consider,

ip = {1: 1, 2: 1, 3: 3} 

so output should be [3] as key 3 has unique value which is not present in dict.

Now there is problem in given fuction:

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 

I am getting error like:

File "main.py", line 14, in uniqueValues if aDict[key] == aDict[key1]: KeyError: 1

Where i am doing wrong?

1

2 Answers

Your main problem is this line:

dicta = aDict 

You think you're making a copy of the dictionary, but actually you still have just one dictionary, so operations on dicta also change aDict (and so, you remove values from adict, they also get removed from aDict, and so you get your KeyError).

One solution would be

dicta = aDict.copy() 

(You should also give your variables clearer names to make it more obvious to yourself what you're doing)

(edit) Also, an easier way of doing what you're doing:

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

Use Counter from collections library:

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 

Output:

[3, 4, 7] 
4

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like