Есть ли в словарях метод ключа? Я проверяю «Нет» и у меня возникают проблемы - PullRequest
3 голосов
/ 03 августа 2010

У меня есть 2 словаря, и я хочу проверить, есть ли ключ в любом из словарей.

Я пытаюсь:

if dic1[p.sku] is not None:

Я хотел бы, чтобы был метод hasKey,в любом случае.

Я получаю сообщение об ошибке, если ключ не найден, почему?

Ответы [ 3 ]

13 голосов
/ 03 августа 2010

Используйте оператор in:

if p.sku in dic1:
    ...

(Кстати, вы также можете использовать метод has_key , но использование in предпочтительнее.)

0 голосов
/ 03 августа 2010

if dic1.get(p.sku) is None: является точным эквивалентом того, что вы пытаетесь, кроме KeyError - поскольку get возвращает None, если ключ отсутствует или в None явнобыл сохранен как соответствующее значение, которое может быть полезно как способ «логически удалить» ключ без фактического изменения набора ключей (вы не можете изменить набор ключей, если вы зацикливаетесь на dict, и при этомпоточно-ориентированный, чтобы сделать это без блокировки и т. п., и т. д., при присваивании значения None уже существующему ключу * разрешено в циклах и threadsafe)

Если у вас нет таких требований, if p.sku not in dic1:, как подсказывает @Michael, гораздо предпочтительнее на всех планах (быстрее, лаконичнее, удобочитаемее и т. Д .; -).

0 голосов
/ 03 августа 2010

Они делают:

if dic1.has_key(p.sku):
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...