当前位置: 首页 > 面试题库 >

为什么OrderedDict的值不相等?

尤夕
2023-03-14
问题内容

使用Python 3:

>>> from collections import OrderedDict
>>> d1 = OrderedDict([('foo', 'bar')])
>>> d2 = OrderedDict([('foo', 'bar')])

我想检查是否相等:

>>> d1 == d2
True
>>> d1.keys() == d2.keys()
True

但:

>>> d1.values() == d2.values()
False

您知道为什么值不相等吗?

我已经使用Python 3.4和3.5进行了测试。

提出这个问题之后,我在Python-Ideas邮件列表中发布了更多详细信息:

https://mail.python.org/pipermail/python-
ideas/2015-December/037472.html


问题答案:

在Python 3中,dict.keys()dict.values()返回特殊的可迭代类-
分别为acollections.abc.KeysView和a
collections.abc.ValuesView。第一个继承__eq__自的方法set,第二个使用默认值object.__eq__测试对象身份。



 类似资料:
  • 问题内容: 我指的是模块中的OrderedDict,这是一个有序的字典。 如果它具有可订购的附加功能,我意识到这通常不是必需的,但是即使如此,是否还有缺点?慢一点吗?是否缺少任何功能?我没有看到任何丢失的方法。 简而言之,为什么我 不 总是使用它而不是普通的词典? 问题答案: 是的子类,并且需要更多内存来跟踪键的添加顺序。这不是小事。该实现在幕后增加了第二个,所有键的双向链接列表(这是记住顺序的部

  • 我是java新手,所以请不要后悔java中的对象和东西正在传递引用的值,但下面是我试图传递对象的代码。当我通过传递到函数中更新值时,a的值没有改变。发生了什么请帮助我。。。

  • 问题内容: 似乎以下代码应返回true,但返回false。 这有什么意义? 问题答案: 常规()和严格()相等之间的唯一区别是,严格相等运算符禁用类型转换。由于已经在比较两个相同类型的变量,因此使用的相等运算符的类型无关紧要。 不管您使用常规相等还是严格相等,对象比较仅 在您比较相同的精确对象时得出 。 也就是说,给定,,,但。 两个不同的对象(即使它们都具有零或相同的精确属性)也永远不会相等地进

  • 问题内容: 我有一个应该相等的整数(我通过输出验证了它)。但是在我的情况下,Java看不到这些变量具有相同的值。 我有以下代码: 并产生以下输出: 可能我必须添加定义如下的内容: 并且我们从环路构造采取: 因此,这两个变量都具有整数类型。 问题答案: 查看本文:装箱的值和相等性 使用或比较包装器类型(例如s,s或s)时,您 会将它们作为引用* 而不是值 进行比较 。 * 如果两个变量指向不同的对象

  • 问题内容: 考虑下面的java代码。 输出量 价值的负值如何产生相同的价值? 但是结果不能是因为java中Integer的最大值是。 但是想知道为什么吗?内部正在发生哪种按位运算? 问题答案: 内部正在发生哪种按位运算? Java使用带符号数字的二进制补码表示。因此,更改符号操作包括两个步骤: 反转原始值的位,并 添加到结果中。 的表示如下: 反转产生 加法使其再次成为相同的数字,即 由于整数溢出