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

2025-03-05 09:18:00
admin
原创
63
摘要:问题描述:我在 python 中有以下字典:d = {'1': 'one', '3': 'three', '2': 'two', '5': 'five', '4': 'four'} 我需要一种方法来查找此词典中是否存在诸如“一”或“二”之类的值。例如,如果我想知道索引“1”是否存在,我只需输入:"1...

问题描述:

我在 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()
相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   2560  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1552  
  IPD(Integrated Product Development)流程作为一种先进的产品开发管理模式,在众多企业中得到了广泛应用。其中,技术评审与决策评审是IPD流程中至关重要的环节,它们既有明显的区别,又存在紧密的协同关系。深入理解这两者的区别与协同,对于企业有效实施IPD流程,提升产品开发效率与质量具有重要意义...
IPD管理流程   1  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、ClickUp、Freshdesk、GanttPRO、Planview、Smartsheet、Asana、Nifty、HubPlanner、Teamwork。在当今快速变化的商业环境中,项目管理软件已成为企业提升效率、优化资源分配和确保项目按时交付的关键工具。然而...
项目管理系统   2  
  建设工程项目质量关乎社会公众的生命财产安全,也影响着企业的声誉和可持续发展。高质量的建设工程不仅能为使用者提供舒适、安全的环境,还能提升城市形象,推动经济的健康发展。在实际的项目操作中,诸多因素会对工程质量产生影响,从规划设计到施工建设,再到后期的验收维护,每一个环节都至关重要。因此,探寻并运用有效的方法来提升建设工程...
工程项目管理制度   3  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用