警告:如果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
# ...
你选择哪一个在很大程度上取决于个人品味...尽管任何(...)
解决方案是必要的,如果你需要实际的True
或False
结果,而不是在一个if
语句。
您可以使用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子句-