Python字典如何根据列表内的目标元素查找对应键
问题对应代码定义
调整val后的初始代码如下:
ref = ['<var>', '<id>', '<expr>'] val = [['a', 'b', 'c'], 'b', '1+1'] dicio = dict(zip(ref, val))
需求是不直接完整匹配['a', 'b', 'c']列表,查询得到值为列表、且列表包含目标元素b对应的键,预期返回<var>,要排除掉值直接为字符串b对应的<id>键。
实现方法
原来用list(dicio.keys())[list(dicio.values()).index('a')]的写法只适合值完全等于目标的场景,遇到值是列表这类容器的情况会匹配失效,直接遍历字典键值对筛选即可:
target = 'b' match_key = None for key, value in dicio.items(): # 先筛掉非列表类型的值,再判断目标元素是否在列表内 if isinstance(value, list) and target in value: match_key = key break
执行后match_key的值就是<var>。
如果要简化成一行写法,可以用生成器表达式:
match_key = next(k for k, v in dicio.items() if isinstance(v, list) and 'b' in v)
注意:不要跳过类型判断直接写
'b' in v,否则会遍历到值为字符串'b'的条目——字符串本身也是可迭代对象,'b' in 'b'会返回True,最终会错误返回<id>。
内容的提问来源于stack exchange,提问作者Vitor L.
相关产品推荐
相关产品推荐

