gpt4 book ai didi

python - 如果字典中的键重复,如何引发错误

转载 作者:太空狗 更新时间:2023-10-29 18:17:02 25 4
gpt4 key购买 nike

如果用户在字典中输入重复键,我会尝试引发错误。词典在一个文件中,用户可以手动编辑该文件。

例子:

dico= {'root':{
'a':{'some_key':'value',...},
'b':{'some_key':'value',...},
'c':{'some_key':'value',...},
...

'a':{'some_key':'value',...},
}
}

新键'a'已经存在...

如何测试 dico 并在从文件加载 dico 时警告用户?

最佳答案

写一个dict的子类,覆盖__setitem__,这样它在替换现有键时抛出错误;重写文件以使用新子类的构造函数而不是默认的 dict 内置函数。

import collections

class 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')
),

....
)
)

使用元组而不是字典进行文件导入(使用 {} 符号编写,它将使用默认的字典构造函数,并且重复项会在字典构造函数获取它们之前消失!)。

关于python - 如果字典中的键重复,如何引发错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4999233/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com