我一直在尝试使dict子类继承自UserDict.DictMixin支持非哈希键的子类。性能不是问题。不幸的是,PythonDictMixin通过尝试从子类创建dict对象来实现其中的某些功能。我可以自己实现这些功能,但是我仍然坚持__cmp__。
dict
UserDict.DictMixin
DictMixin
__cmp__
我找不到__cmp__对dict类内置的逻辑的简要描述。
如果您要问比较字典的工作原理,是这样的:
adiff not in B or A[adiff] != B[adiff]
bdiff not in A or A[bdiff] != B[bdiff]
用伪代码:
def smallest_diff_key(A, B): """return the smallest key adiff in A such that adiff not in B or A[adiff] != B[bdiff]""" diff_keys = [k for k in A if k not in B or A[k] != B[k]] return min(diff_keys) def dict_cmp(A, B): if len(A) != len(B): return cmp(len(A), len(B)) try: adiff = smallest_diff_key(A, B) except ValueError: # No difference. return 0 bdiff = smallest_diff_key(B, A) if adiff != bdiff: return cmp(adiff, bdiff) return cmp(A[adiff], b[bdiff])
这是从dictobject.c中的2.6.3实现翻译而来的。