我有一份我正在排序的词典列表。为什么第一种方法通过但第二种方法失败? python docs没有解决这个问题(或者我只是遗漏了一些非常明显的东西)。
listy = []
listy.append({'a':None,'b':'Fred'})
listy.append({'a':datetime.now().date(),'b':'Dave'})
listy.sort(key=lambda k:(k['b'],k['a'])) # o.k.
listy.sort(key=lambda k:(k['a'],k['b'])) # fails with "TypeError: can't compare datetime.date to NoneType"
答案 0 :(得分:4)
在第一种情况下,您要比较元组
('Fred', None) < ('Dave', datetime.now().date())
由于每个元组的第一个元素不同,Python根本不需要比较第二个元素来知道哪个元素小于另一个元素。
在第二种情况下,您要将None
与date
进行比较。 Python2确实允许混合类型比较(虽然不是这种特殊情况 - 请参阅注释),但它不是特别有用,更有可能导致奇怪的错误,所以Python3中删除了这个功能
答案 1 :(得分:0)
它逐元素地比较元组。如果第一个元素相等,它只会比较第二个元素。换句话说,如果两个&#39; b&#39;价值被设定为Dave&#39;