如何检查字典中某个值是否存在?
- 2025-03-05 09:18:00
- admin 原创
- 63
问题描述:
我在 python 中有以下字典:
d = {'1': 'one', '3': 'three', '2': 'two', '5': 'five', '4': 'four'}
我需要一种方法来查找此词典中是否存在诸如“一”或“二”之类的值。
例如,如果我想知道索引“1”是否存在,我只需输入:
"1" in d
然后 python 会告诉我这是否正确或错误,然而除了查找值是否存在之外,我需要做完全相同的事情。
解决方案 1:
>>> 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]
>>> 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]
原因是上述每个方法都返回不同类型的对象,这些对象可能适合也可能不适合查找操作:
>>> type(d.viewvalues())
<type 'dict_values'>
>>> type(d.values())
<type 'list'>
>>> type(d.itervalues())
<type 'dictionary-valueiterator'>
解决方案 2:
在 Python 3 中,你可以使用
"one" in d.values()
测试它"one"
是否在你的字典值之中。
在 Python 2 中,使用更高效
"one" in d.itervalues()
反而。
请注意,这会触发对字典值的线性扫描,一旦找到就会短路,因此这比检查键是否存在效率低很多。
解决方案 3:
Python字典有get(key)函数
>>> d.get(key)
例如,
>>> d = {'1': 'one', '3': 'three', '2': 'two', '5': 'five', '4': 'four'}
>>> d.get('3')
'three'
>>> d.get('10')
None
如果您的密钥不存在,那么它将返回None
值。
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 以上版本相关的内容。
解决方案 4:
使用字典视图:
if x in d.viewvalues():
dosomething()
解决方案 5:
检查值是否存在的不同类型
>>> 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
解决方案 6:
你可以使用这个:
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"]))
解决方案 7:
在 Python 3 中,您可以使用values()
字典函数。它返回值的视图对象。这反过来可以传递给iter
返回迭代器对象的函数。可以使用 检查迭代器in
,如下所示,
'one' in iter(d.values())
或者您可以直接使用视图对象,因为它类似于列表
'one' in d.values()
相关推荐
热门文章
项目管理软件有哪些?
热门标签
曾咪二维码
扫码咨询,免费领取项目管理大礼包!
云禅道AD