在字典中查找键为“Like”字符串的项

2024-10-06 18:24:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在找一本字典,里面的键是“key\uxxx\ustring”。XXX可以改变。在TSQL中,我只需要

 select * from dictionary where key like 'key_%_string'

有没有用Python实现的方法?你知道吗


Tags: 方法keyfromstringdictionary字典whereselect
2条回答

在python中,字典是键和值对的映射

您需要迭代字典中的项,并检查您的键是否与给定的模式“key\uxxx\ustring”匹配 您需要re库来检查正则表达式

因此,这里有一个简单的代码片段,您可以在python3.6中使用与给定regex“key\uxxx\ustring”匹配的值打印键

import re

for key, value in my_dict.items():
    if re.match('key_(.*)_string', key):
        print (key, value)

1)这里的第一行,就是导入re库进行正则表达式匹配

import re

2)第二行是迭代字典中的项目

for key, value in my_dict.items():

3)第三行将每个键与regex模式“key\u xxx\u string”匹配

if re.match('key_(.*)_string', key):

4)如果关键字匹配,第四行实际上只是打印字典中的项目

print (key, value)

正如其他人所说,dict用于快速哈希查找,这意味着您需要查看每个键以找到所需的值。你知道吗

然而,这也可以通过理解来完成:

import re

[v for k, v in my_dict.items() if re.match('key_.*_string', k)]

您甚至可以创建自己的类来为您执行以下操作:

class FuzzyDict(dict):

    def fetch(self, pattern):
        p = re.compile(pattern)
        return [v for k, v in self.items() if p.match(k)] or None

    def fetch_one(self, pattern):
        p = re.compile(pattern)
        for k, v in self.items():
            if p.match(k):
                return v

那么就这么简单了:

d.fetch("my_.*_string")

使用示例如下:

data = FuzzyDict({'key_1_string':1, "key_2_string":2, "invalid": 3})

data.fetch("key_.*_string")
#[1,2]
data.fetch_one("key_.*_string")
#1
data.fetch("some text")
#None

如果找不到任何内容,则默认为None

相关问题 更多 >