python 字典cmp()函数问题
黄舟
黄舟 2017-04-17 14:57:42
0
1
320

dict1 = {'Name': 'e', 'Age': 30};
dict2 = {'Name': 'z', 'Age': 27};
print "Return Value : %d" % cmp (dict1, dict2)
为什么会返回1呢,这个比较到底是什么回事?当字典1关键字AGE的值大于28时就开始大于字典2了,不是e小于z么?

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

membalas semua (1)
PHPzhong

stackoverflow上有关dict的cmp的实现,代码如下:

def smallest_diff_key(A, B): """return the smallest key adiff in A such that A[adiff] != B[bdiff]""" diff_keys = [k for k in A if A.get(k) != B.get(k)] return min(diff_keys) def dict_cmp(A, B): if len(A) != len(B): return cmp(len(A), len(B)) adiff = smallest_diff_key(A, B) bdiff = smallest_diff_key(B, A) if adiff != bdiff: return cmp(adiff, bdiff) return cmp(A[adiff], b[bdiff])

先比较字典的长度,如果相等。再比较adiff(在A中与B值不相等的最小key)和bdiff(在B中与A值不相等的最小key),再等则比较两者的值。

>>> dict1 = {'Name': 'e', 'Age': 30, 'Addr':'hust'}; >>> dict2 = {'Name': 'z', 'Age': 27, 'Adds':'hust'}; >>> print "Return Value : %d" % cmp (dict1, dict2) Return Value : -1

长度相等,直接比较'Addr'和'Adds',所以dict1 < dict2

>>> dict1 = {'Name': 'e', 'Age': 30, 'Addr':'hust'}; >>> dict2 = {'Name': 'z', 'Age': 27, 'Addr':'whu'}; >>> print "Return Value : %d" % cmp (dict1, dict2) Return Value : -1 >>> min('Name', 'Age', 'Addr') 'Addr'

长度相等,key完全相等,比较value不等keys('Name','Age','Addr')中的最小key('Addr')的value('hust','whu'),所以dict1 < dict2

详情见stackoverflow

    Muat turun terkini
    Lagi>
    kesan web
    Kod sumber laman web
    Bahan laman web
    Templat hujung hadapan
    Tentang kita Penafian Sitemap
    Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!