astral orange wrote: > Hi, I am trying to teach myself Python and have a good book to help me > but I am stuck on something and I would like for someone to explain > the following piece of code for me and what it's actually doing. > Certain parts are very clear but once it enters the "def store(data, > full_name): ...." function and the "def lookup()..." function things > get a little confusing for me. Specifically, lines 103-108 *and* Lines > 110-111. > > Lastly, I am not sure how to print the results I've put into this > program either, the book I'm reading doesn't tell me. As you can tell, > I am a beginner and I don't truly understand everything that is going > on here...a lot, but not all.... > > Here is the code: > > 92 def init(data): > 93 data['first'] = {} > 94 data['middle'] = {} > 95 data['last'] = {} > 96 > 97 def store(data, full_name): > 98 names = full_name.split() > 100 if len(names) == 2: names.insert(1, '') > 101 labels = 'first', 'middle', 'last' > 103 for label, name in zip(labels, names):
The zip-function takes n iterables, and produces a list with n-tuples out of it. Type this into the python-prompt: >>> zip([1, 2, 3], ["a", "b", "c"]) The other thing here is tuple-unpacking. If you know that something has a specific length, you can unpack it into distinct values like this: >>> a, b = (10, 20) >>> print a 10 >>> print b 20 Now for label, name in zip(labels, names): does - create a list of tuples, each tuple having two elements, the first being the label, the second a name - loops over this list - for each item in the list (remember, it's a 2-tuple!), unpack it into label and name > 104 people = lookup(data, label, name) > 105 if people: > 106 people.append(full_name) > 107 else: > 108 data[label][name] = [full_name] > 109 > 110 def lookup(data, label, name): > 111 return data[label].get(name) Data here is expected to be a dictionary of dictionaries. The first level of keys are the labels. The second is the name. It is expected that labels always exist, but names might be empty, so instead of writing return data[label][name] it uses get(name) on a dict which will return the value for the key, or None: >>> {"foo" : "bar"}.get("foo") bar >>> {"foo" : "bar"}.get("baz") >>> # no output means None That being said, I agree with Neo that this introduction seems to be rather bad. Diez -- http://mail.python.org/mailman/listinfo/python-list