繁体   English   中英

re.findall()在python中返回空列表?

[英]re.findall() returns empty list in python?

我有定义如下的python方法。 我尝试匹配与clientname参数匹配的字典元素

def loadSites(self, fpath, clientname):

            keylist = [re.findall(clientname,k) for k in self.cacheDictionary.keys()]
            for items in keylist:
                print(items)

当我打印列表时,我得到了;

['testClient']
['testClient']
[]
[]
[]
[]

我希望只得到两个要素。 我在这里做错了什么?

另外,如何从字典中删除该项目?

如果只需要两个元素,则只有在存在匹配项时才返回。

keylist = [re.findall(clientname,k) if(re.findall(clientname,k)) else None for k in self.cacheDictionary.keys()]
        for items in keylist:
            print(items)

如果找不到该模式,则re.findall返回一个空list 您可以简单地将它们filter掉。 请注意,当您迭代dict ,会自动迭代键:

keylist = filter(None, (re.findall(clientname,k) for k in self.cacheDictionary))
# Python3: if you want to persist a list
# keylist = list(filter(None, (re.findall(clientname,k) for k in self.cacheDictionary)))

for items in keylist:
    print(items)

更新:

如果要从字典中删除所有与您的模式匹配并且实际上包含字符串的键,则tat有很多选项不需要正则表达式,例如:

ks = [k for k in self.cacheDictionary if clientName in k]
for k in ks:
    self.cacheDictionary.pop(k)
    # del self.cacheDictionary[k]

或者只是一次迭代就理解了新的dict形式的草稿:

self.cd = {k: v for k, v in self.cd.items() if clientName not in  k}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM