[Tutor] dict['_find']

Steven D'Aprano steve at pearwood.info
Sun Feb 20 06:20:10 CET 2011


Max Niederhofer wrote:
> Hello all,
> 
> first post, please be gentle. I'm having serious trouble finding an
> alternative for the deprecated find module for dictionaries.

What find module for dictionaries?



> The code (from Zed Shaw's Hard Way, exercise 40) goes something like
> this. Hope indentation survives.
> 
> cities = {'CA': 'San Francisco', 'MI': 'Detroit', 'FL': 'Jacksonville'}
> 
> def find_city(themap, state):
>     if state in themap:
>         return themap[state]
>     else:
>         return "Not found."
> 
> cities['_find'] = find_city

What is the purpose of this?

You have a dictionary called "cities" that contains four items. The 
first three are pairs of  State:City, which makes sense. The fourth is a 
pair of the word "_find" matched with a function find_city. I don't 
understand what the purpose of this is.



> while True:
>     print "State? (ENTER to quit)",
>     state = raw_input("> ")
>     if not state: break
> 
> city_found = cities['_find'](cities, state)
> print city_found


I think you need to include the actual search inside the while loop. 
Otherwise, the loop keeps asking for a new state, but doesn't do 
anything with it until you exit the loop.


while True:
     print "State? (ENTER to quit)",
     state = raw_input("> ")
     if not state: break
     city_found = cities['_find'](cities, state)
     print city_found


But I don't understand the purpose of placing the function inside the 
dictionary. Much clearer and simpler is:


while True:
     print "State? (ENTER to quit)",
     state = raw_input("> ")
     if not state: break
     print find_city(cities, state)



-- 
Steven


More information about the Tutor mailing list