为什么 keys() 和 items() 方法为相同的键返回不同的布尔值?(Python 3.6)

斯坦利
>>> spam = {'name': 'Zophie', 'age': 7}
>>> 'name' in spam.keys()
True
>>> 'name' in spam.items()
False
>>> 

在python 3.6中,当检查字典中是否存在一个键时,该keys()方法返回True,而该items()方法返回False相同的键。为什么会这样?

马丁·彼得斯

items()包含元组,键值对:

>>> spam.items()
dict_items([('name', 'Zophie'), ('age', 7)])

您的密钥不是这样的元组。它可能包含在元组之一中,但in不会递归测试是否包含。

要么测试正确的键值元组:

>>> ('name', 'Zophie') in spam.items()
True

或者,如果您无法仅访问keys()字典视图,请使用该any()函数单独测试每一对(当找到匹配项时,迭代会提前停止):

>>> any('name' in pair for pair in spam.items())
True

或者

>>> any(key == 'name' for key, value in spam.items())
True

另外,如果您所做的只是测试密钥,那么只需使用key in dictionary. 没有必要创建过用于这种情况下,键的单独字典视图; 这只是浪费 Python 周期和内存,因为针对字典的包含测试实现了完全相同的结果。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么Object.keys()和for ...不同?

为什么dict和dict.items()的顺序不同?

Xcode 6为什么CLLocationManager不返回纬度和经度

为什么 3 (int) 和 3.0 (float) 在 python 中相同?

理解问题,为什么这两个程序分别需要3和6秒

为什么dict中的key和dict.keys()中的key具有相同的输出?

为什么object.keys()到Object常量和Object.create()的结果不同?

波浪号对布尔值的影响-为什么在Python中〜True为-2和〜False为-1?

为什么lambda函数以不同的方式从dict.items()和元组列表中获取数据?

(...Array([random number]).keys().toString()) 为什么这个表达式的长度和值总是给出相同的结果?

为什么Python 3需要dict.items用list()包装?

为什么Python 3需要dict.items用list()包装?

为什么Perf和Papi为L3缓存引用和未命中赋予不同的值?

为什么python中字典的keys()以不同的顺序返回?

为什么dict1.items()<= dict2.items()和dict1.viewitems()<= dict2.viewitems()返回不同的结果?

为什么我用相同的纬度和经度获取不同的h3索引

为什么ES6 IIFE和ES5 IIFE的执行上下文不同?

Unity-为什么iPhone 6和iPhone 7在触摸输入方面表现不同?

为什么在CentOS 6和CentOS 7之间的/ proc / cpuinfo中得到不同的cpu标志?

ES6 Promise - 为什么从 catch() 抛出和从 then() 抛出的行为不同?

为什么 100 >> 100 和 100 >>> 100 在 Javascript 中返回 6?

为什么SSH在netstat中将协议显示为tcp6 *和* tcp?

为什么python2和python3中的print输出使用相同的字符串不同?

为什么 int arr[]={0,3,2,4,5,6,7}; 给出错误和 int arr[7]={0,3,2,4,5,6,7}; 不是

为什么 x * 和 * z = 3?

有人可以解释为什么此代码返回6 6 6 6 6而不是1 2 3 4 5

为什么Z3 Online和Z3PY的结果不同?

为什么Python2和Python3的行为不同

为什么在python2和python3中包含路径不同?