python词典中的条件运算符和set

时间:2015-03-02 11:57:10

标签: python python-2.7

我正在准备考试python认证,并发现这些问题仍然没有得到我的解决。请帮助。

http://www.vskills.in/certification/practice-test/Information-Technology/Python/Python-Test-Set/Python-Developer-Test-Set-5

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上。

1 个答案:

答案 0 :(得分:1)

Python 2尝试为几乎所有内容提供排序顺序;字典也不例外。

字典相互比较时为arbitrarily but consistently ordered,以确保您可以对包含它们的异构列表进行排序。你不应该从他们的比较中得出任何意义,真的。

Python 3放弃了所有对象应相对于彼此进行排序的概念,并且在字典上使用除了相等和标识之外的比较运算符而不是TypeError

设置重载比较运算符以发信号子集。如果set_aset_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版本中一致地排序。
  • 您的上一个示例比较了两种不同的类型。元组永远不会等于列表,即使它们具有相同的内容。