字典有 has key 方法吗?我在检查'None'时遇到问题

3 投票
3 回答
8215 浏览
提问于 2025-04-16 02:13

我有两个字典,我想检查一个键是否在这两个字典中的任意一个里。

我正在尝试:

if dic1[p.sku] is not None:

我希望有一个叫做 hasKey 的方法,不过无论如何。

如果找不到这个键,我会收到一个错误,为什么会这样呢?

3 个回答

0

这段代码 if dic1.get(p.sku) is None: 的意思和你想要的差不多,不过它不会出现 KeyError 错误。因为 get 方法在找不到对应的键时会返回 None。这也意味着,如果这个键的值本身就是 None,它也会返回 None。这在某些情况下很有用,比如你可以用它来“逻辑上删除”一个键,而不是真的去改变键的集合(因为在遍历字典的时候,你不能改变键的集合,而且如果没有锁的话,这样做也不安全)。不过,把一个已经存在的键的值设为 None 是可以的,这在循环中是允许的,而且是线程安全的。

如果你没有这种特殊需求的话,正如 @Michael 所说,使用 if p.sku not in dic1: 会更好。这种写法在各个方面都更优秀(更快、更简洁、更易读等等)。

0

他们这样做:

if dic1.has_key(p.sku):
13

使用 in 操作符:

if p.sku in dic1:
    ...

顺便提一下,你也可以使用 has_key 方法,但推荐使用 in

撰写回答