为什么 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条评论
登录后参与评论

相关文章

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

为什么我的命令行参数被解释为布尔值(Perl 6)?

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

为什么Python3的ipaddress.IPv6Network.hosts函数忽略第一个和最后一个IPv6地址?

来自分类Dev

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

来自分类Dev

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

来自分类Dev

为什么Python2和Python3的行为不同

来自分类Dev

AngularJS为什么从函数返回布尔值与属性不同?

来自分类Dev

为什么exp(log(6))== exp(log(3))* 2在R中返回FALSE?

来自分类Dev

集线器和交换机为什么在针脚1和2上接收并通过其电缆的针脚3和6传输数据?

来自分类Dev

为什么Object.keys将id显示为键?

来自分类Dev

为什么索引2、3、6、7、10、11的“ fifoBuffer”值未在teapotPacket []数组中传递?

来自分类Dev

从抽象基类继承时,为什么__slots__在Python 2和3中的行为不同

来自分类Dev

为什么此argparse代码在Python 2和3之间的行为不同?

来自分类Dev

为什么此argparse代码在Python 2和3之间的行为不同?

来自分类Dev

为什么Python 3和C中的if语句会产生不同的结果?

Related 相关文章

  1. 1

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

  2. 2

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

  3. 3

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

  4. 4

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

  5. 5

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

  6. 6

    为什么我的命令行参数被解释为布尔值(Perl 6)?

  7. 7

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

  8. 8

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

  9. 9

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

  10. 10

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

  11. 11

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

  12. 12

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

  13. 13

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

  14. 14

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

  15. 15

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

  16. 16

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

  17. 17

    为什么Python3的ipaddress.IPv6Network.hosts函数忽略第一个和最后一个IPv6地址?

  18. 18

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

  19. 19

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

  20. 20

    为什么Python2和Python3的行为不同

  21. 21

    AngularJS为什么从函数返回布尔值与属性不同?

  22. 22

    为什么exp(log(6))== exp(log(3))* 2在R中返回FALSE?

  23. 23

    集线器和交换机为什么在针脚1和2上接收并通过其电缆的针脚3和6传输数据?

  24. 24

    为什么Object.keys将id显示为键?

  25. 25

    为什么索引2、3、6、7、10、11的“ fifoBuffer”值未在teapotPacket []数组中传递?

  26. 26

    从抽象基类继承时,为什么__slots__在Python 2和3中的行为不同

  27. 27

    为什么此argparse代码在Python 2和3之间的行为不同?

  28. 28

    为什么此argparse代码在Python 2和3之间的行为不同?

  29. 29

    为什么Python 3和C中的if语句会产生不同的结果?

热门标签

归档