Search code examples
pythondictionarykeyerror

Dict KeyError for value in the dict


I have a dict inside a dict:

{
'123456789': {u'PhoneOwner': u'Bob', 'Frequency': 0},
'98765431': {u'PhoneOwner': u'Sarah', 'Frequency': 0},
}

The idea is to scan a list of calls made by numbers and compare against the dict, increasing the frequency each time a match is found.

When I run the script:

try:
phoneNumberDictionary[int(line)]['Frequency'] += 1
except KeyError:
phoneNumberDictionary[int(line)]['Frequency'] = 1

I get error:

KeyError: '18667209918'

(Where 18667209918 is the number that is currently being searched)

Yet when I print the dict and just search for that number I can find it immediately. Any ideas?


Solution

  • dictionary =  {
         '123456789': {u'PhoneOwner': u'Bob', 'Frequency': 0},
         '98765431': {u'PhoneOwner': u'Sarah', 'Frequency': 0},
         }
    key_present = '123456789'
    
    try:
        dictionary[key_present]['Frequency'] += 1
    except KeyError:
        pass
    
    key_not_present = '12345'
    
    try:
        dictionary[key_not_present]['Frequency'] += 1
    except KeyError:
        dictionary[key_not_present] = {'Frequency': 1}
    
    print dictionary
    

    you have strings as keys in the dictionary but to access you are using an integer key.

    I think you will still get KeyError from the statement in the exception block. from your statement phoneNumberDictionary[int(line)]['Frequency'] = 1 python assumes that a key-value exists with the key you have passes and it has a dictionary with Frequency as one of its key. But you have got KeyError exception in the first place because you did not have a key matching 18667209918

    Therefore initialize the key-value pair of the outer dictionary properly.