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

新手上路,请多包涵

我在 python 中有以下字典:

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

我需要一种方法来查找该字典中是否存在诸如“一”或“二”之类的值。

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

 "1" in d

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

原文由 JimmyK 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 596
2 个回答
>>> 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]

原文由 mac 发布,翻译遵循 CC BY-SA 3.0 许可协议

在 Python 3 中,您可以使用

"one" in d.values()

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

在 Python 2 中,使用效率更高

"one" in d.itervalues()

反而。

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

原文由 Sven Marnach 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题