检查字典的 cmp 函数的工作
Examining the working of cmp function for dictionaries
考虑两个字典如下:
d1={"Name":"John","Age":47}
d2={"Name":"Margaret","Age":35}
在执行以下语句时:
>>>cmp(d1,d2)
1
这意味着由于键是相同的,因此它比较值并优先考虑与 "Age" 键关联的值(可能是因为按字典顺序它排在第一位)。当我更改字典时,这一事实支持了这一点:
d1={"Name":"John","Age":47}
d2={"Name":"Jack","Age":47}
语句returns1。由于 d1.
的 ASCII 值之和更大
但考虑一下这对词典:
d1={"Name":"John","Age":47}
d2={"Name":"Jzan","Age":47}
现在声明returns-1。
这是为什么?是不是比较ASCII值的总和,而是一个一个地比较每个字符的值?
另外,如果 keys 本身不同,函数比较的依据是什么?
大多数编程语言都是根据字典顺序(字典中单词的排序方式)实现字符串比较,即逐个比较字符的值和return第一个差异。
如果键本身不同,return 值实际上取决于实现。您可以从此处找到更多信息:Is there a description of how __cmp__ works for dict objects in Python 2?。但是,不建议在您的代码中依赖此功能。
考虑两个字典如下:
d1={"Name":"John","Age":47}
d2={"Name":"Margaret","Age":35}
在执行以下语句时:
>>>cmp(d1,d2)
1
这意味着由于键是相同的,因此它比较值并优先考虑与 "Age" 键关联的值(可能是因为按字典顺序它排在第一位)。当我更改字典时,这一事实支持了这一点:
d1={"Name":"John","Age":47}
d2={"Name":"Jack","Age":47}
语句returns1。由于 d1.
的 ASCII 值之和更大但考虑一下这对词典:
d1={"Name":"John","Age":47}
d2={"Name":"Jzan","Age":47}
现在声明returns-1。 这是为什么?是不是比较ASCII值的总和,而是一个一个地比较每个字符的值? 另外,如果 keys 本身不同,函数比较的依据是什么?
大多数编程语言都是根据字典顺序(字典中单词的排序方式)实现字符串比较,即逐个比较字符的值和return第一个差异。
如果键本身不同,return 值实际上取决于实现。您可以从此处找到更多信息:Is there a description of how __cmp__ works for dict objects in Python 2?。但是,不建议在您的代码中依赖此功能。