["python","class","sorting","hash","magic-methods"]
Making a python user-defined class sortable, hashable

What methods need to be overridden/implemented when making user-defined classes sortable and/or hashable in python? What are the gotchas to watch out for? I type dir({}) into my interpreter to get a list of methods on built-in dicts. Of those, I assume I need to some implement some subset of ['__cmp__', '__eq__', '__ge__', '__gt__', '__hash__', '__le__', '__lt__', '__ne__'] Is there a difference in which methods must be implemented for Python3 as opposed to Python2?
To make your items sortable, they only need to implement __lt__. That's the only method used by the built in sort. The other comparisons or functools.total_ordering are only needed if you actually want to use the comparison operators with your class. To make your items hashable, you implement __hash__ as others noted. You should also implement __eq__ in a compatible way -- items that are equivalent should hash the same.