注意python dict的内容变化

来源:互联网 发布:雕刻机编程 编辑:程序博客网 时间:2024/04/29 07:12

下面的代码,执行有错:

class TripleDataFilter():    def __init__(self):        self.idFilter = None        self.propFilter = None        self.valueFilter = None        self.prefilter = None        self.filterOrder = []        self.filterMap = {"id":self.idFilter,                         "prop_name":self.propFilter,                        "prop_value":self.valueFilter}             def read_conf(self, confFile):        if (not os.path.isfile(confFile)) or "" == confFile:            sys.stderr.write(confFile + " is not exit!\n")            return False        config = ConfigParser.ConfigParser()        config.read(confFile)        if "WORK_DIR" in config.sections():            workDir = config.items("WORK_DIR")[0][1].strip()        else:               workDir = "."        prefilterConf = config.items("PREFILTER")[0][1]        if "none" != prefilterConf.lower():            self.preFilter = prefilter.PreFilter()            self.preFilter.read_conf(prefilterConf)                 fItemList = config.items("FILTER_CONF_FILES")        for fItem in fItemList:            segName = fItem[0].strip()            filePath = fItem[1].strip()            if os.path.split(filePath)[0] == "":                filePath = workDir + "/" + filePath            if "id_conf" == segName:                self.idFilter = SegmentFilter("id");                self.idFilter.read_conf(filePath, self.preFilter)            elif "prop_conf" ==segName:                self.propFilter = SegmentFilter("prop");                self.propFilter.read_conf(filePath, self.preFilter)            elif "value_conf" == segName:                print "conf value"                self.valueFilter = SegmentFilter("value");                self.valueFilter.read_conf(filePath, self.preFilter)            else:                   sys.stderr.write("字段名错误 %s\n" % segName)                return False                                       self.filterOrder = config.items("FILTER_ORDER")        self.filterOrder.sort(key = lambda x:x[1])                        def filter(self, tripleExt):        for filterType in self.filterOrder:            if self.filterMap[filterType[0]]:                self.filterMap[filterType[0]].filter(tripleExt)            else:                   print filterType[0] + " is null"

执行filter时,会说filterMap里的元素都为None。

原因是,创建dict 时,会重新复制一份新的对象到dict中。

最开始,所有的filter都为None,存入了dict中。

后来,虽然filter都被赋值,但dict中的值没有改变,仍为None。


原创粉丝点击