воскресенье, 18 августа 2013 г.

Проверка существования ключа в словаре.

Обработка исключений

try:
 d[key] = d[key] + 1
except KeyError:
 d[key] = 1

Метод has_key

if d.has_key(key):
 d[key] = d[key] + 1
else:
 d[key] = 1

Метод setdefault

d[key] = d.setdefault(key, 0) + 1

Метод get

d[key] = d.get(key, 0) + 1

Оператор in

if key in d:
 d[key] = d[key] + 1
else:
 d[key] = 1
  1. Если предполагается почти 100% существование ключей в словаре, то инструкция try except будет самой эффективной на любом наборе данных.
  2. Если искомый ключ часто не существует, то инструкция try except окажется самой медленной из возможных решений.
  3. Метод has_key эффективно работает с небольшими наборами данных, на больших ведет себя хуже.
  4. Методы setdefault и get почти одинаковы по скорости, setdefault незначительно выигрывает.
  5. Хорошие показатели достигаются с оператором in и на маленьких и на больших наборах данных.


Если есть сомнения что лучше выбрать в конкретной ситуации, лучше использовать оператор in.
А еще лучше - тестировать.

Информацию нашел здесь http://wiki.gungfu.de/Main/PythonIdioms
По этой ссылке полное описание тестов с результатами.

Комментариев нет:

Отправить комментарий