Python中如何获取any(x in string for x in dict)表达式内的x值?
问题根因
生成器表达式有独立的局部作用域,内部定义的变量x不会泄露到外部的外层作用域,因此你在if代码块中访问x时会触发NameError异常。另外提醒不要使用dict作为自定义变量名,会覆盖Python内置的字典类型,引发后续不可预期的错误。
解决方法
- 方法1:显式遍历字典键,中途匹配到就终止循环
my_dict = { "foo": "a", "bar": "b", "see": "c", } string = "foo in the city" target_val = None for x in my_dict: if x in string: target_val = my_dict[x] break if target_val is not None: print(target_val)
- 方法2:使用
next()配合生成器表达式,逻辑更简洁,保持和any()一致的短路特性
my_dict = { "foo": "a", "bar": "b", "see": "c", } string = "foo in the city" # 第二个参数为未匹配到时的默认返回值,避免触发StopIteration异常 target_val = next((my_dict[x] for x in my_dict if x in string), None) if target_val is not None: print(target_val)
内容的提问来源于stack exchange,提问作者Zombie
相关产品推荐
相关产品推荐

