簡體   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