Python 当我更改键的顺序时,为什么对这个dict列表排序失败?
我有一份我正在整理的目录。为什么第一种方法通过了,而第二种方法失败了?问题并没有解决这个问题(或者我只是遗漏了一些非常明显的东西)Python 当我更改键的顺序时,为什么对这个dict列表排序失败?,python,Python,我有一份我正在整理的目录。为什么第一种方法通过了,而第二种方法失败了?问题并没有解决这个问题(或者我只是遗漏了一些非常明显的东西) 在第一种情况下,比较元组 ('Fred', None) < ('Dave', datetime.now().date()) ('Fred',None)
在第一种情况下,比较元组
('Fred', None) < ('Dave', datetime.now().date())
('Fred',None)<('Dave',datetime.now().date())
由于每个元组的第一个元素是不同的,Python根本不需要比较第二个元素来知道哪个元素比另一个元素小
在第二种情况下,您将
None
与日期进行比较。Python2确实允许混合类型比较(虽然不是这个特定的情况-请参阅注释),但它不是特别有用,而且更可能导致奇怪的错误,因此在Python3中,在第一个比较元组的情况下,此功能被删除
('Fred', None) < ('Dave', datetime.now().date())
('Fred',None)<('Dave',datetime.now().date())
由于每个元组的第一个元素是不同的,Python根本不需要比较第二个元素来知道哪个元素比另一个元素小
在第二种情况下,您将None
与日期进行比较。Python2确实允许混合类型比较(虽然不是这个特定的情况-请参阅注释),但它不是特别有用,而且更可能导致奇怪的错误,因此在Python3中删除了此功能,因为它是逐元素比较元组。只有当第一个元素相等时,它才会比较第二个元素。换句话说,如果将两个“b”值都设置为“Dave”,它将失败。它是逐元素比较元组。只有当第一个元素相等时,它才会比较第二个元素。换句话说,如果两个“b”值都设置为“Dave”,它将失败。尝试listy.append({'a':23,'b':'Dave'})
,您将在第一个排序中看到相同的错误。尝试listy.append({'a':23,'b':'Dave'})
,您将在第一个排序中看到相同的错误。Python 2也不允许这样做。它允许相互比较许多不同的类型,这些类型不是特别有用,但不是全部,并且None
将引发TypeError:无法将datetime.date与NoneType进行比较。(在3.x中,这是由一般错误案例处理的,错误消息稍微好一点:TypeError:unorderable类型:datetime.date()
)Python 2也不允许这样做。它允许相互比较许多不同的类型,这些类型不是特别有用,但不是全部,并且None
将引发TypeError:无法将datetime.date与NoneType进行比较。(在3.x中,这是由一般的错误案例处理的,有一个稍微好一点的错误消息:TypeError:unorderable类型:datetime.date()
)你是对的,但gnibbler击败了你…你是对的,但gnibbler击败了你…你是对的,但gnibbler会接受gnibbler