[英]Checking whether a key or value exists in a dictionary
首先,提前感谢您的帮助。 我是编码新手,目前正在使用《用 Python 自动化无聊的东西》这本书学习 Python,我有一个关于多重分配的概念性问题。 https://automatetheboringstuff.com/chapter5/
以下是书中的摘录:
>>> spam = {'name': 'Zophie', 'age': 7}
>>> 'name' in spam.keys()
True
>>> 'Zophie' in spam.values()
True
>>> 'color' in spam.keys()
False
>>> 'color' not in spam.keys()
True
>>> 'color' in spam
False
所以我尝试了,
>>> 7 in spam
期待True
,但得到False
。
然后我试了一下,
>>> 7 in spam.values()
返回True
。
因此,似乎字符串值的工作方式相同,但整数的行为不同。
为什么会这样?
你的问题是7 是一个值,而不是一个键。 spam = {'name': 'Zophie', 'age':7}
所以如果你这样做:
7 in spam >> False
'age' in spam >> True
7 in spam.values() >> True
7 in spam.keys() >> False
foo = {key0 : value0 , key1 : value1 ... keyN: valueN}
考虑到,在 python 中in
查找字典的键列表,而不是值列表。 除非您指定这样做。
In
检查键,而值可以通过dict.values()
访问, dict.values()
可以访问字典的值。 .keys()
和.values()
返回一个可迭代对象。
对于检查现有密钥的更优雅/更短的方法,您可以使用dict.get(key)
。 如果键在字典中,则返回给定键的值,否则返回“后备”返回值。 默认情况下,此“回退”返回值是None
(如果未指定),或者可以由程序员使用dict.get(key, return_if_not_in_dict)
。 有关更详细的解释,请参阅此问题或以下代码:
In [10]: spam = {'name': 'Zophie', 'age': 7}
In [11]: 'name' in spam
Out[11]: True
In [12]: 'Zophie' in spam
Out[12]: False
In [13]: 'name' in spam.keys()
Out[13]: True
In [14]: 'Zophie' in spam.values()
Out[14]: True
In [15]: type(spam.keys())
Out[15]: dict_keys
In [17]: type(spam.values())
Out[17]: dict_values
In [18]: spam.get('name')
Out[18]: 'Zophie'
In [19]: spam.get('some invalid key') # returns `None`, so no output here
In [20]: spam.get('some invalid key', 'not in here')
Out[20]: 'not in here'
In [21]: bool(spam.get('name'))
Out[21]: True
In [22]: bool(spam.get('some invalid key'))
Out[22]: False
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.