当前位置: 首页 > 知识库问答 >
问题:

如何测试dict中是否有三个键之一?

鲜于海
2023-03-14

我如何测试任何abc中的键?

Python中有一些短而简单的方法吗?

有两把钥匙,我可以用

if a or b in my_dict.keys():

我怎么能用三把钥匙做同样的事?

共有2个答案

巩阳秋
2023-03-14

警告:如果my_dict.keys()中的a或b不符合您的想法:。例如:

>>> 'a' or 'b' in {'c': 'd', 'e': 'f'}.keys()
'a'

实际发生的是短路评估的结果:首先,'a'被评估,如果它是“真实的”,它会返回,而不检查任何其他东西。只有当'a'为Falsy时,才会将'b'(并且只有'b')检查为该判决的密钥。

如果在代码中添加一些括号,Python的实际功能就会更加清晰:

if (a) or (b in my_dict.keys()):

实际上,您必须以这种风格编写两值版本的代码:

if a in my_dict.keys() or b in my_dict.keys():
    # ...

关于你的实际问题:

要测试任意数量的值(包括两个),您有两个选择:

if any(x in my_dict.keys() for x in (a, b, c)):
    # ...

或者

if my_dict.keys() & {a, b, c}:  # replace keys with viewkeys in Python 2
    # ...

你选择哪一个在很大程度上取决于个人品味...尽管任何(...)解决方案是必要的,如果你需要实际的TrueFalse结果,而不是在一个if语句。

钱焕
2023-03-14

您可以使用any()检查任何条件是否为True。假设您的dict是:

my_dict = {
  'x': 1,
  'y': 2,
  'a': 3   # `a` key in dict
}

为了检查任何项目存在于字典的键,你可以这样做:

>>> values_to_check = ['a', 'b', 'c']  # list of value to check
#                     v You do not need `.keys()` as by default `in` checks in keys 
>>> any(item in my_dict for item in values_to_check)
True
 类似资料:
  • 有一个名为“矩阵”的哈希图,它有很多键。每个键的值都是一个具有自己值的ArrayList。考虑到这一点,我无法找到一种方法来测试ArrayList值中是否有特定值,因为如果我将字符串参数传递给HashMap的方法“.containsValue()”,该方法将找到ArrayList对象,测试将为false。因此,我必须做一些相当疯狂的事情,就像我在例子中所做的那样。正如您所看到的,没有像“getAr

  • 问题内容: 我在选择表中日期为今天前3个月的行时遇到了一些麻烦。我尝试在where子句中使用,但没有运气。如果项目超过3个月,如何在SQL Server中签入? 问题答案: 您的语法似乎有误。 那应该是

  • 我知道一种方法是: 有什么更干净的方法吗?(可能使用JUnit的?)

  • 问题内容: 如何测试是否已在python中导入模块? 例如,我需要基础知识: 也 谢谢! 感谢您的所有评论 问题答案: 如果您不想通过两次导入来进行优化,请避免麻烦,因为Python已经解决了这一问题。 如果您 需要 避免此类情况:修正草率的编码- 确保不需要,即在使用之前定义(导入)所有内容(在导入的情况下:一次,在启动时,在模块级别) 。 如果您确实有充分的理由:是一个包含所有已导入到某处的模

  • 问题内容: 如何测试一个列表是否包含另一个列表(即它是一个连续的子序列)。假设有一个名为contains的函数: 编辑: 问题答案: 这是我的版本: 正如安德鲁·贾菲(Andrew Jaffe)在他的评论中指出的那样,它返回一个元组(start,end + 1),因为我认为这更像pythonic。它不对任何子列表进行切片,因此应该相当有效。 新手感兴趣的一点是,它使用了for语句上的else子句-