gpt4 book ai didi

python - 插入字典或如果键已经存在而没有散列两次则失败

转载 作者:太空宇宙 更新时间:2023-11-03 12:38:11 25 4
gpt4 key购买 nike

有没有一种方法可以将新 key 插入到 dict 中,或者如果该 key 已经存在而不进行两次散列则失败?

来自这样的事情:

class MyClass:
def __init__(self):
pass

def __hash__(self):
print('MyClass.__hash__ called')
return object.__hash__(self)

my_key = MyClass()
my_value = "my_string"
my_dict = {}
if my_key not in my_dict:
my_dict[my_key] = my_value
else:
raise ValueError

您可以看到 __hash__ 被调用了两次,并且这段代码没有将插入或失败的期望行为表达为原子操作。

最佳答案

使用字典的setdefault方法:

if my_dict.setdefault(my_key, my_value) != my_value:
raise ValueError

setdefault 将第二个参数分配给第一个参数给定的键,但前提是字典中不存在该键。在任何情况下,它都会返回字典中的值(因此要么是原始值,要么是新的默认值,如果没有旧值的话)。

我的代码检查返回值以查看字典是否具有 my_value 以外的值。它将无法检测到在同一键下两次添加相同的值。我不认为有一种方法可以在不进行两次哈希处理的情况下处理这种情况。

关于python - 插入字典或如果键已经存在而没有散列两次则失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35745688/

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