检查字典是否包含列表中的至少一个特定值

Mas*_*son 1 python dictionary python-3.x

检查“目标”列表中的字典中是否存在至少一个特定值的最优雅方法是什么?我过去一直在使用 or 语句,但这些可能相当长:

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

if 'six' in d.values() or 'eight' in d.values() or 'ten' in d.values() or 'fifteen' in d.values():
    # do something
else:
    # do something else
Run Code Online (Sandbox Code Playgroud)

创建一个目标列表,然后遍历该列表以分别根据字典检查每个目标是否更好?在这种情况下,我还需要在 if/else 块的末尾放置中断以确保它不会被多次触发:

targets = ['six', 'eight', 'ten', 'fifteen']
d = {'1': 'one', '3': 'three', '2': 'two', '5': 'five', '4': 'four'}

for t in targets:
    if t in d.values():
        # do something
        break  # to ensure the thing isn't triggered multiple times
    else:
        # do something else
        break  # to ensure the thing isn't triggered multiple times
Run Code Online (Sandbox Code Playgroud)

有没有推荐的方法来缩短它,或者第二个代码块是否像它一样好?

小智 5

你可以用下一个替换它:

if any(t in d.values() for t in targets):
    pass
else:
    pass
Run Code Online (Sandbox Code Playgroud)

在某些情况下会更好地转换d.values()为 set 并传递给附加变量。

values = set(d.values())

if any(t in values for t in targets):
    # ...
Run Code Online (Sandbox Code Playgroud)