如何根据python中Dictionary中的键中使用的正则表达式查找元素?

时间:2017-12-19 03:24:44

标签: python dictionary

我在python中定义了一个Dictionary.And键的构造如下:

  self.cacheDictionary = {}
  key = clientname + str(i)    
  self.cacheDictionary[key] = {'date_populated': str(datetime.datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S")),'date_updated' :str(datetime.datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S")),'client':clientname,
                           'site': dirs[i], 'state':'unprocessed', 'machine':'null'}

在上面的运行时我构建了密钥。我想在重置它时清除缓存中的某些元素。那时,我知道 clientname 参数。使用它作为正则表达式,我可以在缓存中找到元素吗?所以,我很容易清除它们。

我想做的是;

self.cacheDictionary[%clientname%].clear()

1 个答案:

答案 0 :(得分:1)

是和否。你可以通过所有的密钥。但是使用字典的重点是快速查找,即不必通过所有键,所以从这个意义上说你不能。

最佳解决方案 - 如果您有选择 - 将以不同方式组织您的数据,使用客户名称键入字典。在客户端名称下,您放置了另一个使用受损名称键入的字典。根据你的原始数据。

示例实施:

mycontainer.1.jdl70gy26uds@moby    | 2017/12/19 12:50:16 http2: Transport creating client conn 0xc42030b340 to 172.217.2.234:443
mycontainer.1.jdl70gy26uds@moby    | 2017/12/19 12:50:16 http2: Framer 0xc4204862a0: wrote SETTINGS len=18, settings: ENABLE_PUSH=0, INITIAL_WINDOW_SIZE=4194304, MAX_HEADER_LIST_SIZE=10485760
mycontainer.1.jdl70gy26uds@moby    | 2017/12/19 12:50:16 http2: Framer 0xc4204862a0: wrote WINDOW_UPDATE len=4 (conn) incr=1073741824
mycontainer.1.jdl70gy26uds@moby    | 2017/12/19 12:50:16 http2: Transport encoding header ":authority" = "www.googleapis.com"
mycontainer.1.jdl70gy26uds@moby    | 2017/12/19 12:50:16 http2: Transport encoding header ":method" = "GET"
mycontainer.1.jdl70gy26uds@moby    | 2017/12/19 12:50:16 http2: Transport encoding header ":path" = "/customsearch/v1?key=hidingmykey&cx=hidingmycx&q=liquid+nitrogen&num=10&start=1"
mycontainer.1.jdl70gy26uds@moby    | 2017/12/19 12:50:16 http2: Transport encoding header ":scheme" = "https"
mycontainer.1.jdl70gy26uds@moby    | 2017/12/19 12:50:16 http2: Transport encoding header "user-agent" = "Go-http-client/2.0"
mycontainer.1.jdl70gy26uds@moby    | 2017/12/19 12:50:16 http2: Framer 0xc4204862a0: wrote HEADERS flags=END_STREAM|END_HEADERS stream=1 len=140
mycontainer.1.jdl70gy26uds@moby    | 2017/12/19 12:50:16 http2: Framer 0xc4204862a0: read SETTINGS len=18, settings: MAX_CONCURRENT_STREAMS=100, INITIAL_WINDOW_SIZE=1048576, MAX_HEADER_LIST_SIZE=16384
mycontainer.1.jdl70gy26uds@moby    | 2017/12/19 12:50:16 http2: Transport received SETTINGS len=18, settings: MAX_CONCURRENT_STREAMS=100, INITIAL_WINDOW_SIZE=1048576, MAX_HEADER_LIST_SIZE=16384
mycontainer.1.jdl70gy26uds@moby    | 2017/12/19 12:50:16 http2: Framer 0xc4204862a0: wrote SETTINGS flags=ACK len=0
mycontainer.1.jdl70gy26uds@moby    | 2017/12/19 12:50:16 http2: Framer 0xc4204862a0: read WINDOW_UPDATE len=4 (conn) incr=983041
mycontainer.1.jdl70gy26uds@moby    | 2017/12/19 12:50:16 http2: Transport received WINDOW_UPDATE len=4 (conn) incr=983041
mycontainer.1.jdl70gy26uds@moby    | 2017/12/19 12:50:16 http2: Framer 0xc4204862a0: read SETTINGS flags=ACK len=0
mycontainer.1.jdl70gy26uds@moby    | 2017/12/19 12:50:16 http2: Transport received SETTINGS flags=ACK len=0
mycontainer.1.jdl70gy26uds@moby    | 2017/12/19 12:50:16 http2: Framer 0xc4204862a0: read HEADERS flags=END_HEADERS stream=1 len=72
mycontainer.1.jdl70gy26uds@moby    | 2017/12/19 12:50:16 http2: decoded hpack field header field ":status" = "400"
mycontainer.1.jdl70gy26uds@moby    | 2017/12/19 12:50:16 http2: decoded hpack field header field "content-type" = "text/html; charset=UTF-8"
mycontainer.1.jdl70gy26uds@moby    | 2017/12/19 12:50:16 http2: decoded hpack field header field "referrer-policy" = "no-referrer"
mycontainer.1.jdl70gy26uds@moby    | 2017/12/19 12:50:16 http2: decoded hpack field header field "content-length" = "1555"
mycontainer.1.jdl70gy26uds@moby    | 2017/12/19 12:50:16 http2: decoded hpack field header field "date" = "Tue, 19 Dec 2017 12:50:17 GMT"
mycontainer.1.jdl70gy26uds@moby    | 2017/12/19 12:50:16 http2: Transport received HEADERS flags=END_HEADERS stream=1 len=72
mycontainer.1.jdl70gy26uds@moby    | 2017/12/19 12:50:16 http2: Framer 0xc4204862a0: read RST_STREAM stream=1 len=4 ErrCode=PROTOCOL_ERROR
mycontainer.1.jdl70gy26uds@moby    | 2017/12/19 12:50:16 http2: Transport received RST_STREAM stream=1 len=4 ErrCode=PROTOCOL_ERROR
mycontainer.1.jdl70gy26uds@moby    | 2017/12/19 12:50:16 http2: Framer 0xc4204862a0: wrote RST_STREAM stream=1 len=4 ErrCode=CANCEL

如果您的原始字典已修复,您仍然可以使用密钥客户端名称和值损坏的客户端名称创建查找字典。

示例实施:

import datetime
import time

cacheDictionary = {}
dirs = 'abcde'

for clientname in {'John Smith', 'Jane Miller'}:
    for i in range(5):
        key = clientname + str(i)    
        cacheDictionary.setdefault(clientname, {})[key]  = {'date_populated': str(datetime.datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S")),'date_updated' :str(datetime.datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S")),'client':clientname,'site': dirs[i], 'state':'unprocessed', 'machine':'null'}
        time.sleep(0.1)

import pprint

pprint.pprint(cacheDictionary)