Dan*_*ung 21 python python-2.x
我一直在尝试创建一个dict继承的子类,UserDict.DictMixin它支持不可散列的密钥.性能不是问题.不幸的是,Python DictMixin通过尝试从子类创建一个dict对象来实现一些功能.我自己可以实现这些,但我坚持下去__cmp__.
我找不到__cmp__dict类内置使用的逻辑的简洁描述.
Ned*_*der 31
如果你问的是如何比较词典,它是这样的:
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])
Run Code Online (Sandbox Code Playgroud)
这是从dictobject.c中的2.6.3实现转换而来的.