为什么 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}
:
name
和 age
是 键 。
'name': 'Zophie'
和 'age': 7
, 项。
>>> 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}
:
name
和 age
是 键 。
'name': 'Zophie'
和 'age': 7
, 项。