编写一个dict的子类,重写__setitem__,以便在替换现有键时抛出错误;重写文件以使用新的子类的构造函数,而不是默认的dict内置函数。
import collectionsclass Dict(dict): def __init__(self, inp=None): if isinstance(inp,dict): super(Dict,self).__init__(inp) else: super(Dict,self).__init__() if isinstance(inp, (collections.Mapping, collections.Iterable)): si = self.__setitem__ for k,v in inp: si(k,v) def __setitem__(self, k, v): try: self.__getitem__(k) raise ValueError("duplicate key '{0}' found".format(k)) except KeyError: super(Dict,self).__setitem__(k,v)
那么您的文件将必须写为
dico = Dict( ('root', Dict( ('a', Dict( ('some_key', 'value'), ('another_key', 'another_value') ), ('b', Dict( ('some_key', 'value') ), ('c', Dict( ('some_key', 'value'), ('another_key', 'another_value') ), .... ))
使用元组而不是字典进行文件导入(使用{}表示法编写,它将使用默认的dict构造函数,并且在Dict构造函数获取副本之前,重复项会消失!)。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)