>> But, I still don't understand why this works and can't puzzle it >> out. I see a sequence on the left of the assignment operator and a >> dictionary (mapping) on the right. > >When you iterate over a dictionary, you get its keys: > >scores = {"Fred": 10, "Joe": 5, "Sam": 8} >for person in scores: > print(person) > >So unpacking will give you those keys - in an arbitrary order. Of >course, you don't care about the order when there's only one.
Oh, right! Clearly, it was nonintuitive (to me), even though I've written 'for k in d:' many times. A sequence on the left hand side of an assignment, will tell the right hand side to iterate. This also explains something I never quite bothered to understand completely, because it was so obviously wrong: >>> a, b = 72 TypeError: 'int' object is not iterable The sequence on the left hand side signals that it expects the result of iter(right hand side). But, iter(72) makes no sense, so Python says TypeError. I'd imagine my Python interpreter is thinking "Dude, why are you telling me to iterate over something that is so utterly not iterable. Why do I put up with these humans?" I love being able to iterate like this: for k in d: do_something_with(k) But, somehow, this surprised me: [k] = d Now that I get it, I would probably use something like the below. I find the addition of a few characters makes this assignment much clearer to me. # -- if len(d) > 1, ValueError will be raised # (key,) = d.keys() And thank you for the reply Chris, -Martin -- Martin A. Brown http://linux-ip.net/ -- https://mail.python.org/mailman/listinfo/python-list