如何在Python中使用dicts,lists和tuples的元素比较?

时间:2016-01-26 23:02:34

标签: python list dictionary tuples python-2.x

[1,3] > [1,2]
True

好的,听起来很合理,如果没有其他的话,在直观的层面上。

(3,2) <= (3,2)
True

同上。

但是是什么:

(4,3) >= (1,1,1)
True

如果我们在这里比较values()

{'a':1, 'b':2} < {'a':1, 'b':3}
True

那么为什么我们在这里比较keys()

{'a':1, 'b':2} < {'x':1, 'y':2}
True

我没有在任何地方找到有关这些现象的文件。

2 个答案:

答案 0 :(得分:4)

(4,3)大于(1,1,1)的原因与"mouse"大于"elephant"的原因完全相同。 Lexicographical order。使用字符串你可能非常熟悉它。你希望“大象”出现在字典中的“鼠标”之前,对吗?

答案 1 :(得分:4)

Python Language Reference 5.9 Comparisons中非常清楚地记录了这一切。

特别是:

  
      
  • 使用相应元素的比较,按字典顺序比较元组和列表。这意味着要比较相等,每个   元素必须比较相等,两个序列必须相同   类型和长度相同。      如果不相等,则序列的排序与它们的第一个不同元素相同。例如,cmp([1,2,x], [1,2,y])返回
      与cmp(x,y)相同。如果相应的元素不存在,则   首先排序较短的序列(例如,[1,2]&lt; [1,2,3])。
  •   
  • 映射(字典)比较相等,当且仅当它们的排序(key, value)列表比较相等时。 [1]平等以外的结果
      一致地解决,但没有另外定义。 [2]
  •   

脚注是

  
      
  1. 该实现有效地计算了这一点,无需构建列表或排序。

  2.   
  3. 早期版本的Python使用排序(键,值)列表的字典比较,但这对于常见的非常昂贵   比较平等的情况。一个更早版本的Python   仅通过身份比较字典,但这引起了惊喜   因为人们期望能够测试字典的空虚   将其与{}进行比较。

  4.   

比较Python 3中的词典会引发TypeError。同样具有不相容元素的序列:

>>> {} < {1:2}
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unorderable types: dict() < dict()
>>> ['a'] < [1]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unorderable types: str() < int()