Josep M. Fontana wrote:
The only time year is bound is in the previous loop, as I said.  It's the
line that goes:
    name, year = line.strip.....

So year is whatever it was the last time through that loop.

OK, this makes sense. Indeed that is the value in the last entry for
the dictionary. Thanks a lot again.


Dictionaries don't have a "last", or "first", entry -- they're unordered collections. Think of them as a bag filled with stuff -- if you reach in and grab an item, one at a time, you will get the items in some order, but that's imposed on the bag by the sequential nature of taking one item at a time. The items themselves have no order.

Iterating over a dictionary, or printing it, is like dipping into the bag for each item one at a time. Python carefully ensures that this order is consistent: dict,keys(), dict.values() and dict.items() will return the objects in the same order, so long as you don't modify the dictionary between calls. But that order is arbitrary, depends on the history of insertions and deletions, and is subject to change without notice. So if we do this:

d = {}
d[0] = 'a'
d[-1] = 'b'
d[-2] = 'c'

and then print d in Python 3.1.1, we get: {0: 'a', -2: 'c', -1: 'b'}

but if we add the items in a different order:

d = {}
d[-2] = 'c'
d[0] = 'a'
d[-1] = 'b'

we get this instead: {0: 'a', -1: 'b', -2: 'c'}.


In general, there is no relationship between the order you insert objects into a dict and the order that you will get them out. Sometimes it may match. Usually it won't.


--
Steven

_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to