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

Why do keys() and items() methods return different Boolean values for same key? (Python 3.6)

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

在python 3.6中,当检查一个key是否存在于字典中时keys()方法returnsTrue,而items()方法returns False 对于同一个键。为什么会这样?

这是因为 items() returns 键值对列表。

>>> spam = {'name': 'Zophie', 'age': 7}
>>> spam.keys()
dict_keys(['name', 'age'])
>>> spam.items()
dict_items([('name', 'Zophie'), ('age', 7)])

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

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

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

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

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

或者如果您不能只访问 keys() 字典视图,请使用 any() function 单独测试每一对(找到匹配项时会提前停止迭代):

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

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

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

dict.keys() 会 return 一个列表,但是 dict.items() 会 return 你列出 key,value 对中的元组,所以它不会匹配。

例如:

name is not equal to ('name': 'Zophie')

希望你明白了。

当然不一样了

在您的垃圾邮件变量中 --> spam = {'name': 'Zophie', 'age': 7}:

nameage'name': 'Zophie''age': 7