首页 > 解决方案 > 使用正则表达式搜索字典键

问题描述

我定义了一个带有字符串键的字典:

{'dummy': 0, 'K1::foo(bar::z(x,u))': 1, 'K2::foo()': 2}

我想搜索键模式(不是确切的单词),所以if 'foo' in my_dict:应该返回 true。

yax = 'foo'
if yax in my_dict:
    # Should definitely go here
    value = my_dict[yax]
    print(value)
else:
    # Just for error checking that the given name doesn't exist in dictionary
    print("Given value does not exist")

但是上面的代码转到该else部分。

在示例中,foo存在于两个键中。那没关系。第一场比赛没问题。再举一个例子,如果我搜索bar,该if陈述也应该是正确的。

标签: pythondictionary

解决方案


首先,要知道必须通过字典键搜索不是一个好方法。字典的目的是使用散列键启用对值的 O(1) 访问。

也就是说,您可以遍历键。

搜索任何子字符串:

d = {'dummy': 0, 'K1::foo(bar::z(x,u))': 1, 'K2::foo()': 2}

[k for k in d if 'foo' in k]

搜索一个独立的词:

import re
[k for k in d if re.search(r'\bfoo\b', k)]

输出:['K1::foo(bar::z(x,u))', 'K2::foo()']

作为字典理解:

{k:v for k,v in d.items() if 'foo' in k}

输出:{'K1::foo(bar::z(x,u))': 1, 'K2::foo()': 2}


推荐阅读