字典键中的通配符

gwy*_*n93 6 python dictionary glob wildcard python-3.x

假设我有一本字典:

rank_dict = {'V*': 1, 'A*': 2, 'V': 3,'A': 4}
Run Code Online (Sandbox Code Playgroud)

如您所见,我在 V 的末尾添加了一个 *。而 3 可能只是 V 的值,我想要 V1、V2、V2234432 等的另一个键......我想对照:

checker = 'V30'
Run Code Online (Sandbox Code Playgroud)

并获得价值。什么是正确的语法?

for k, v in rank_dict.items():
    if checker == k:
        print(v)
Run Code Online (Sandbox Code Playgroud)

fal*_*tru 6

您可以使用fnmatch.fnmatch来匹配 Unix shell 风格的通配符:

>>> import fnmatch
>>> fnmatch.fnmatch('V34', 'V*')
True
Run Code Online (Sandbox Code Playgroud)
>>> rank_dict = {'V*': 1, 'A*': 2, 'V': 3,'A': 4}
>>> checker = 'V30'
>>> for k, v in rank_dict.items():
...     if fnmatch.fnmatch(checker, k):
...         print(v)
... 
1
Run Code Online (Sandbox Code Playgroud)

注意:每次查找的时间复杂度为 O(n)。这可能成为大型词典的问题。仅当查找性能不是问题时才推荐。