如何检查一个值是否存在于字典中?

我有下面的python字典:

d = {'1': 'one', '3': 'three', '2': 'two', '5': 'five', '4': 'four'}

我需要一种方法来查找这个字典中是否存在诸如“1”或“2”这样的值。

例如,如果我想知道索引“1”是否存在,我只需要输入:

"1" in d

然后python会告诉我这是真还是假,但是我需要做同样的事情,除了找到一个值是否存在。

705463 次浏览

在Python 3中,您可以使用

"one" in d.values()

来测试"one"是否在字典的值中。

在Python 2中,它的使用效率更高

"one" in d.itervalues()

代替。

注意,这会触发对字典值的线性扫描,一旦找到就会短路,因此这比检查键是否存在的效率要低得多。

>>> d = {'1': 'one', '3': 'three', '2': 'two', '5': 'five', '4': 'four'}
>>> 'one' in d.values()
True

出于好奇,比较一下时间:

>>> T(lambda : 'one' in d.itervalues()).repeat()
[0.28107285499572754, 0.29107213020324707, 0.27941107749938965]
>>> T(lambda : 'one' in d.values()).repeat()
[0.38303399085998535, 0.37257885932922363, 0.37096405029296875]
>>> T(lambda : 'one' in d.viewvalues()).repeat()
[0.32004380226135254, 0.31716084480285645, 0.3171098232269287]

如果你想知道为什么…原因是上述每个方法都会返回不同类型的对象,这可能适合也可能不适合查找操作:

>>> type(d.viewvalues())
<type 'dict_values'>
>>> type(d.values())
<type 'list'>
>>> type(d.itervalues())
<type 'dictionary-valueiterator'>

EDIT2:根据评论中的请求…

>>> T(lambda : 'four' in d.itervalues()).repeat()
[0.41178202629089355, 0.3959040641784668, 0.3970959186553955]
>>> T(lambda : 'four' in d.values()).repeat()
[0.4631338119506836, 0.43541407585144043, 0.4359898567199707]
>>> T(lambda : 'four' in d.viewvalues()).repeat()
[0.43414998054504395, 0.4213531017303467, 0.41684913635253906]

使用字典视图:

if x in d.viewvalues():
dosomething()..

Python字典有(关键)函数

>>> d.get(key)

例如,

>>> d = {'1': 'one', '3': 'three', '2': 'two', '5': 'five', '4': 'four'}
>>> d.get('3')
'three'
>>> d.get('10')
None
如果你的键不存在,那么它将返回None值。
< / p >
foo = d[key] # raise error if key doesn't exist
foo = d.get(key) # return None if key doesn't exist

与版本小于3.0和大于5.0相关的内容。

在Python 3中,可以使用字典的values()函数。它返回值的视图对象。这又可以传递给返回迭代器对象的iter函数。迭代器可以使用in检查,如下所示:

'one' in iter(d.values())

或者您可以直接使用视图对象,因为它类似于列表

'one' in d.values()

不同类型来检查值是否存在

d = {"key1":"value1", "key2":"value2"}
"value10" in d.values()
>> False

如果值列表

test = {'key1': ['value4', 'value5', 'value6'], 'key2': ['value9'], 'key3': ['value6']}
"value4" in [x for v in test.values() for x in v]
>>True

如果列表值与字符串值

test = {'key1': ['value4', 'value5', 'value6'], 'key2': ['value9'], 'key3': ['value6'], 'key5':'value10'}
values = test.values()
"value10" in [x for v in test.values() for x in v] or 'value10' in values
>>True

你可以用这个:

d = {'1': 'one', '3': 'three', '2': 'two', '5': 'five', '4': 'four'}
print("one" in d.values)

或者你可以使用任何函数:

print(any([True for i,j in d1.items() if j == "one"]))