Python Dictionary DataStructure, какой метод d или d.get ()?

Хотя я использую Python Dictionary DataStructure (который содержит пару «ключ-значение»), если я хочу получить какое-то значение из моего Словаря, у меня есть два варианта: d [''] и g.get ('key'), поэтому теперь я запутался, что лучше и Зачем ?? Я так понимаю, но когда дело доходит до потребления памяти и оценки в памяти, какая из них лучше?

Надеясь на положительный ответ,

  • Структура данных для хранения табличных данных в памяти?
  • Что бы вы использовали модуль heapq Python в реальной жизни?
  • Python эквивалентен java.util.SortedSet?
  • Как реализовано set ()?
  • Структура данных для сопоставлений 1: 1 в python?
  • Python получает случайный ключ в словаре в O (1)
  • С уважением.

  • Python opencv2 (cv2) обертка получает размер изображения?
  • Почему допустимо назначать пустой список, но не пустой кортеж?
  • Pandas: своеобразное падение производительности для inplace rename после dropna
  • Spark ALS predAll возвращает пустое
  • Как запустить скрипт python из интерактивной оболочки IDLE?
  • sqlite удалить символы un utf-8
  • 5 Solutions collect form web for “Python Dictionary DataStructure, какой метод d или d.get ()?”

    Из документов библиотеки Python

    d[key]
    Верните элемент d с помощью ключевого ключа . Повышает значение KeyError если на карте нет ключа .

    Если подкласс dict определяет метод __missing__() , если ключевой ключ отсутствует, операция d[key] вызывает этот метод с ключевым ключом в качестве аргумента. Операция d[key] возвращает или поднимает все, что возвращается или поднимается __missing__(key) если ключ отсутствует. Никакие другие операции или методы не вызывают __missing__() . Если __missing__() не определен, KeyError поднимается. __missing__() должен быть методом; он не может быть переменной экземпляра. […]

    а также

    get(key[, default])
    Возвращает значение для ключа, если ключ находится в словаре, иначе по умолчанию . Если значение по умолчанию не задано, по умолчанию оно равно None , так что этот метод никогда не вызывает KeyError .

    Разница заключается в возвращаемом значении. Когда вы запрашиваете значение, соответствующее несуществующему ключу, вы либо хотите

    1. KeyError поднят
    2. Обратный вызов
    3. Возвращаемое значение по умолчанию

    Python предоставляет различные функции с помощью нескольких методов.

    При нажатии клавиши [] когда ключ не будет найден, при вызове _missing_ или сборе исключения _missing_ производительности. Что касается того, какой из них быстрее, когда присутствует ключ , я проверил исходный код. (Я использовал 2.7.2 для этой проверки.) В dictobject.c мы видим:

    • get звонки dict_get
    • [] вызывает dict_subscript

    Теперь, если значения присутствуют, в dict_get мы имеем

     if (!PyArg_UnpackTuple(args, "get", 1, 2, &key, &failobj)) return NULL; if (!PyString_CheckExact(key) || (hash = ((PyStringObject *) key)->ob_shash) == -1) { hash = PyObject_Hash(key); if (hash == -1) return NULL; } ep = (mp->ma_lookup)(mp, key, hash); 

    и в dict_subscript у нас есть

     assert(mp->ma_table != NULL); if (!PyString_CheckExact(key) || (hash = ((PyStringObject *) key)->ob_shash) == -1) { hash = PyObject_Hash(key); if (hash == -1) return NULL; ep = (mp->ma_lookup)(mp, key, hash); 

    Единственное различие заключается в том, что get делает дополнительный распакованный кортеж!

    Значительное? Понятия не имею. 🙂

    Если 'key' не существует в словаре,

    d['key']

    будет бросать KeyError , в то время как

    d.get('key')

    вернет None .

    Разница в том, что если ключ отсутствует, d[key] KeyError исключение KeyError , тогда как d.get(key) возвращает Noned.get(key, default) возвращает значение по умолчанию).

    Нет заметных различий в требованиях к памяти.

    Они разные, особенно если ключ отсутствует в вашем словаре (см. Здесь )

    d[key]

    Верните элемент d с помощью ключевого ключа. Повышает значение KeyError, если на карте нет ключа.

    get(key[, default])

    Возвращает значение для ключа, если ключ находится в словаре, иначе по умолчанию. Если значение по умолчанию не задано, по умолчанию оно равно None, так что этот метод никогда не вызывает KeyError.

    Оба они ведут себя одинаково, если ключ существует. Но если ключ не найден, d['key'] KeyError исключение KeyError , тогда как d.get('key') вернет None . Вы также можете предоставить второй аргумент методу get, который будет возвращен в не найденное условие: d.get('key', '') вернет пустую строку, если ключ не найден.

    Python - лучший язык программирования в мире.