我正在准备考试python认证,并发现这些问题仍然没有得到我的解决。请帮助。
a = {2,2,3,4}
b = {1,2,3}
>>> b<a
False
>>> a<b
False
upto python 2.7这也有效现在我认为它们已经修复了。
{1:2,2:3,3:4}<{2:5,3:6,4:7,5:8}
True
[1,2,3]==(1,2,3)
False
我的问题是他们在这些类型的条件运算符背后的任何逻辑是否在dictonaries上。
答案 0 :(得分:1)
Python 2尝试为几乎所有内容提供排序顺序;字典也不例外。
字典相互比较时为arbitrarily but consistently ordered,以确保您可以对包含它们的异构列表进行排序。你不应该从他们的比较中得出任何意义,真的。
Python 3放弃了所有对象应相对于彼此进行排序的概念,并且在字典上使用除了相等和标识之外的比较运算符而不是TypeError
。
设置重载比较运算符以发信号子集。如果set_a
是set_b
的子集,则set_a < set_b
为真。请参阅set types documentation。
将所有这些转化为您的具体示例:
4
,另一个具有未共享的值1
。对子集的测试在两个方向都失败。{1:2,2:3,3:4} < {2:5,3:6,4:7,5:8}
为True,因为第一个字典的键数较少。选择是任意的,除此之外没有任何特定的含义,这意味着两个字典将始终在一个Python版本中一致地排序。