Словари. Основные понятия. Характеристики. Создание словарей. Доступ к значениям в словаре
Содержание
- 1. Особенности словарей. Преимущества применения
- 2. Отличия между словарями и списками
- 3. Операции и методы обработки словарей. Перечень
- 4. Особенности представления ключей числовыми типами
- 5. Какие значения не могут использоваться в качестве ключей?
- 6. Какие существуют способы создания словаря?
- 7. Создание словаря с помощью оператора присваивания =. Примеры
- 8. Создание словаря с помощью конструктора dict(). Пример
- 9. Каким образом осуществляется доступ к значению по его ключу?
- 10. Примеры избежания ошибок доступа по несуществующему ключу
- 11. Примеры вложенных словарей
- Связанные темы
Поиск на других ресурсах:
1. Особенности словарей. Преимущества применения
В языке Python существует возможность использовать словари. Словари – это встроенный тип данных, который является ассоциативным массивом или хешем и базируется на отображении пар типа (ключ:значение).
Преимущества применения словарей:
- с помощью словарей можно разрабатывать эффективные структуры данных;
- для словарей не нужно писать вручную алгоритмы поиска данных, поскольку эти операции уже реализованы;
- словари могут содержать объединенные данные в виде записей;
- словари эффективны при представлении разреженных структур данных.
Основные характеристики словарей следующие:
- в словарях доступ к элементам выполняется по ключу, а не по индексу. Словари определяют взаимосвязь пар ключ:значение. По ключу происходит доступ к значению. Если в словаре реализовывать доступ к значению по индексу, то в этом случае индекс представляет собой ключ, а не смещение относительно начала;
- словари представляют неупорядоченные коллекции произвольных объектов. В словарях элементы (ключи) сохраняются в неопределенном порядке. Порядок формирования элементов в словаре определяет интерпретатор. Это необходимо для обеспечения более быстрого поиска.
- словари имеют переменную длину. Количество элементов в словаре может увеличиваться или уменьшаться;
- гетерогенность – словари могут содержать объекты любых типов;
- произвольное количество вложений – словари имеют возможность создания произвольного количества уровней вложений, поскольку словари могут содержать списки, другие словари и т.п.;
- словари относятся к категории изменяемых объектов. Поэтому, в словарях нет смысла использовать операции которые имеют фиксированный порядок следования элементов (например, конкатенация);
- словари являются таблицами ссылок на объекты или хеш-таблицами и относятся к отображаемым объектам. Это означает, что в словарях объекты отображают (представляют) ключи на значение.
⇑
2. Отличия между словарями и списками
Между словарями и списками существуют следующие основные отличия:
- списки являются упорядоченными коллекциями, словари не являются упорядоченными коллекциями;
- в списках элементы извлекаются с помощью смещения, которое определяет позицию элемента в списке. В словарях элементы вытягиваются с помощью ключа;
- в отличие от списков, в словарях нет поддержки операций над последовательностями (например, конкатенация, получение среза и прочее);
- списки являются массивами ссылок на объекты. Словари являются массивами неупорядоченных таблиц ссылок на объекты, поддерживающим доступ к объектам по ключу.
⇑
3. Операции и методы обработки словарей. Перечень
В языке Python существует огромное разнообразие операций и методов для обработки словарей. Все эти средства вкратце перечислены здесь:
- стандартный метод len() – определяет количество элементов в списке;
- операция D[key] – доступ к элементу словаря D по значению ключа key;
- операция del – удаление элемента по ключу;
- операции in, not in – определения наличия или отсутствия ключа в словаре;
- метод iter() – получить итератор по ключам словаря;
- метод clear() – удалить все элементи из словаря;
- метод copy() – вернуть копию словаря;
- метод dict.fromkeys() – создать новый словарь из ключей и значений;
- метод get() – получить значение по ключу;
- метод items() – вернуть представление элементов словаря;
- метод keys() – получить новое представление ключей словаря;
- метод pop() – удаление элементов из словаря с возвратом значения;
- метод popitem() – вытягивание из словаря произвольной пары ключ:значение;
- метод setdefault() – установить элемент по умолчанию;
- метод update() – обновление словаря по заданному списку пар ключ:значение;
- метод values() – получить список значений из словаря.
Более подробно использование вышеперечисленных операций и методов можно изучить в темах:
⇑
4. Особенности представления ключей числовыми типами
В словарях, в качестве ключей могут использоваться числовые типы: целый или вещественный (с плавающей запятой). В случае представления ключей числовыми типами можно выделить следующие особенности:
- при поиске нужного значения по ключу используется простая операция сравнения. Если в качестве ключа указывать значение разных числовых типов, например 1 и 1.0, то такие значения считаются взаимозаменяемыми (обращаются к одному и тому же элементу словаря);
- представление ключа числовым типом с плавающей запятой не рекомендуется, поскольку значение этих типов есть приближенными. Если в качестве ключа нужно указать числовой тип, то для этого целесообразно использовать целые числовые типы.
⇑
5. Какие значения не могут использоваться в качестве ключей?
В качестве ключей нельзя использовать изменяемые типы объектов. Например, списки, словари и прочие изменяемые типы не могут использоваться в качестве ключей. Однако, в качестве значений эти изменяемые типы можно использовать.
⇑
6. Какие существуют способы создания словаря?
В языке Python, чтобы создать словарь можно использовать один из следующих способов:
- с помощью оператора присваивания = и фигурных скобок, в которых через запятую размещаются пары ключ:значение;
- с помощью конструктора dict() класса dict.
⇑
7. Создание словаря с помощью оператора присваивания =. Примеры
Словарь можно создать удобным (естественном) способом с помощью оператора присваивания =.
# Создание словаря # с помощью оператора присваивания # 1. Пустой словарь A = {} print('A = ', A) # 2. Словарь из 3-х элементов # 2.1. Содержит целочисленные ключи и строки значений B = { 1:'Mon', 2:'Tue', 3:'Wed', 4:'Thu', 5:'Fri', 6:'Sat', 7:'Sun' } print('B = ', B) print('B[2] = ', B[2]) # B[2] = Tue # 2.2. Содержит строковые ключи и вещественные значения C = { 'Pi':3.1415, 'Exp':2.71 } print('C = ', C) print('C[Exp] = ', C['Exp']) # C[Exp] = 2.71 # 2.3. Словарь, который содержит наборы значений D = { 'Table1':[ 1, 2, 4], 'Table2':[ 8, -2, 2.33] } print('D = ', D) print('D[Table1] = ', D['Table1']) # D[Table1] = [1, 2, 4] print('D[Table2] = ', D['Table2']) # D[Table2] = [8, -2, 2.33]
Результат выполнения программы
A = {} B = {1: 'Mon', 2: 'Tue', 3: 'Wed', 4: 'Thu', 5: 'Fri', 6: 'Sat', 7: 'Sun'} B[2] = Tue C = {'Pi': 3.1415, 'Exp': 2.71} C[Exp] = 2.71 D = {'Table1': [1, 2, 4], 'Table2': [8, -2, 2.33]} D[Table1] = [1, 2, 4] D[Table2] = [8, -2, 2.33]
⇑
8. Создание словаря с помощью конструктора dict(). Пример
Словарь может быть создан с помощью одного из конструкторов dict(), которые реализованы в классе dict. В соответствии с документацией Python в классе dict используется 3 конструктора, которые имеют следующую общую форму
dict(**keyword_arg) dict(mapping, **keyword_arg) dict(iterable, **keyword_arg)
где
- keyword_arg – необязательный ключевой аргумент. Если конструктор вызывается без ключевого аргумента (например, dict()), то создается пустой словарь. Если в конструкторе задается несколько ключевых аргументов, то они разделяются запятой (в общей форме конструктора использованы символы **);
- mapping – отображаемый объект, на основе которого создается словарь;
- iterable – итерированный объект, на основе которого создается словарь.
В зависимости от аргументов, интерпретатор Python вызывает соответствующий конструктор. Во всех конструкторах первый объект каждого элемента становится ключом, второй становится соответствующим значением.
В случае, если ключ встречается больше одного раза, то принимается последнее значение, установленное по этому ключу.
Пример. Демонстрируется создание словарей разными способами.
# Создание словаря с помощью конструктора dict # 1. Разновидность конструктора dict(**keyword_arg) # 1.1. Создать пустой словарь A = dict() print('A = ', A) # A = {} # 1.2. Создать список # {'Winter': 1, 'Spring': 2, 'Summer': 3, 'Autumn': 4} SEASONS = dict( Winter=1, Spring=2, Summer=3, Autumn=4) print('SEASONS = ', SEASONS) # --------------------------------------------------- # 2. Разновидность конструктора dict(mapping, **keyword_arg) # 2.1. Применение функции zip() DAYS = [ 1, 2, 3 ] DAYS_NAMES = [ 'Mon', 'Tue', 'Wed' ] DICT_DAYS = dict(zip(DAYS, DAYS_NAMES)) print(DICT_DAYS) # {1: 'Mon', 2: 'Tue', 3: 'Wed'} # 2.2. Использование пар (key:value) DICT_DAYS = dict([(1,'Mon'), (2,'Tue'), (3,'Wed')]) print(DICT_DAYS) # {1: 'Mon', 2: 'Tue', 3: 'Wed'} # --------------------------------------------------- # 3. Разновидность конструктора dict(iterable, **keyword_arg) # Применение конструктора по образцу B = {} B = dict({1:'Mon', 2:'Tue', 3:'Wed'}) print('B = ', B) # B = {1: 'Mon', 2: 'Tue', 3: 'Wed'}
Результат выполнения программы
A = {} SEASONS = {'Winter': 1, 'Spring': 2, 'Summer': 3, 'Autumn': 4} {1: 'Mon', 2: 'Tue', 3: 'Wed'} {1: 'Mon', 2: 'Tue', 3: 'Wed'} B = {1: 'Mon', 2: 'Tue', 3: 'Wed'}
⇑
9. Каким образом осуществляется доступ к значению по его ключу?
В словаре, если известен ключ, то доступ к значению по эту ключу можно получить с помощью операции []. В этот же способ можно изменить значение, если известен ключ, который соответствует этому значению.
Например.
# Доступ к значению в словаре # 1. Создать список # {'Winter': 1, 'Spring': 2, 'Summer': 3, 'Autumn': 4} SEASONS = dict( Winter=1, Spring=2, Summer=3, Autumn=4) # 2. Вывести значение по ключу 'Spring' value = SEASONS['Spring'] # value = 2 # 3. Изменить значение в словаре по его ключу # Задается словарь с номерами и названиями помещений D = { 233:'Lecture hall', 234:'Laboratory' } # Изменение 'Laboratory' на 'Programming laboratory' D[234] = 'Programming laboratory'
⇑
10. Примеры избежания ошибок доступа по несуществующему ключу
При работе со словарями, возможна ситуация, когда происходит доступ по ключу, которого нет в словаре. В этом случае в программе возникает ошибка и генерируется исключение KeyError.
Чтобы избежать ошибки доступа по несуществующемоу ключу можно использовать один из трех способов:
- предварительно проверить наличие ключа с помощью конструкции if;
- использовать блок try-except для обработки исключения KeyError;
- использовать метод get(), который, в случае несуществующего ключа, возвращает значение по умолчанию.
В примере демонстрируются все три способа.
Пример.
# Словари. Избежание доступа по несуществующему ключу # Исходный словарь Days = { 1:'Mon', 2:'Tue', 3:'Wed', 4:'Thu', 5:'Fri', 6:'Sat', 7:'Sun' } # 1. Попытка обратиться к несуществующему дню # day = Days[8] # возникает исключение KeyError: 8 # 2. Способ 1. Обращение к несуществующему дню, # использование оператора if day = int(input("Enter day: ")) if day in Days: print("day = ", Days[day]) else: print("1. Using if statement: Error.") # 3. Способ 2. Обращение к несуществующему ключу, # использование конструкции try-except try: print('day = ', Days[day]) except KeyError: print('2. Using try-except statement: Error.') # 4. Способ 3. Обращение к несуществующему ключу, # использование метода get() print('3. Using get() method: ', Days.get(day))
⇑
11. Примеры вложенных словарей
В качестве значений словари могут содержать другие вложенные словари. Например:
# Вложенные словари # Пример 1. # Внутренний словарь Worker_Type = { 'Manager':1, 'SupportStaff':2 } # Внешний словарь # {'Worker': {'Manager': 1, 'SupportStaff': 2}} Worker_Dict = { 'Worker' : Worker_Type } print(Worker_Type) print(Worker_Dict) # Пример 2. Figures = { 'Figure' : { 1:'Circle', 2:'Triangle', 3:'Rombus' } } print(Figures)
Результат выполнения программы
{'Manager': 1, 'SupportStaff': 2} {'Worker': {'Manager': 1, 'SupportStaff': 2}} {'Figure': {1: 'Circle', 2: 'Triangle', 3: 'Rombus'}}
⇑
Связанные темы
- Встроенные функции и операции обработки словарей
- Методы работы со словарями
- Работа со словарями. Встроенные функции list(), zip(). Обход словаря. Генераторы словарей. Сортировка. Сочетание словарей с множествами
⇑