检查字典中是否存在键或值

时间:2019-01-05 08:27:22

标签: python python-3.x 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

因此,似乎字符串值的工作方式相同,但整数的行为不同。

为什么会这样?

2 个答案:

答案 0 :(得分:2)

您的问题是 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是在查找字典的键列表,而不是值列表。除非您指定这样做。

答案 1 :(得分:0)

In仅检查键,而值可以通过dict.values()访问,dict.values()可以访问字典的值。 .keys().values()都返回可迭代。

对于检查现有密钥的更简便方法,可以使用dict.get(key)。如果键在字典中,则返回给定键的值,否则返回“后备”返回值。默认情况下,此“后备”返回值为None(如果未指定),也可以由程序员使用dict.get(key, return_if_not_in_dict)来设置。有关更详细的说明,请参见this question或以下代码:

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