On Jan 4, 9:56 am, "Reedick, Andrew" <[EMAIL PROTECTED]> wrote: > As a Perl monkey in the process of learning Python, I just stepped on > the "'1' (string) is not the same as 1 (integer) in regards to keys for > dictionaries/hashes" landmine.
Congratulations. You have just stepped off the "'1' (string) is the same as 1 (integer) in regards to several purposes" landmine. Welcome to the awk-free world :-) > Is there a good way to ensure that > numbers represented as strings or ints do not get mixed up as keys? > > Example of the problem: > >>> h2 = { 1 : ''} > >>> print h2.has_key(1) > True > >>> print h2.has_key('1') > False > > The problem occurred because a method used to generate keys was > returning a string instead of a number without an explicit conversion > taking place. And since I was using hash.get(i, default_value) to avoid > having to pair every key lookup with a hash.has_key(), no exception was > thrown when the key wasn't found. has_key is a has_been ... use "key in dict" instead of "dict.has_key(key)" > It's fugly to wrap every key reference in str(), ex: > foo[str(some_func(i))]. Fugliness is in the eye of the beholder. -- http://mail.python.org/mailman/listinfo/python-list