簡體   English   中英

檢查字典中是否存在鍵或值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM