Словари.

Словарь (dict) в Python — это ассоциативный массив или хеш. Это неупорядоченное множество пар ключ: значение с требованием уникальности ключей.

В отличие от последовательностей, доступ к элементам словаря производится по ключу, а не по индексу, ключ может быть любого типа, ключ не допускает изменений. Основные особенности словарей:

  • Доступ осуществляется по ключу, а не по индексу. По аналогии со списком, в словаре можно получить доступ к элементам в цикле по ключам;
  • Значения словаря хранятся в неотсортированном порядке, более того, ключи могут храниться не в том порядке, в котором они добавляются;
  • По аналогии со списками, словарь может хранить вложенные словари. Словарь может хранить в качестве значений объекты любого типа (heterogeneous). Ключ в словаре — immutable тип, может быть строкой, целым числом, float либо кортежем, состоящим из указанных типов.
  • Словари реализованы как хеш-таблицы с быстрым доступом.
  • Словари, так же как и списки, хранят ссылки на объекты, а не сами объекты.

Чтобы работать со словарём, его нужно создать. Создать его можно несколькими способами:

#1.C помощью литерала:
d = {}
print(d)
input()
#выведет: {}

d = {'dict': 1, 'dictionary': 2}
print(d)
input()
#выведет: {'dict': 1, 'dictionary': 2}

#2.C помощью функции dict:
d = dict(short='dict', long='dictionary')
print(d)
input()
#выведет: {'short': 'dict', 'long': 'dictionary'}

d = dict([(2, 1), (5, 6)])
print(d)
input()
#выведет: {2: 1, 5: 6}

#3.C помощью метода fromkeys:
d = dict.fromkeys(['a', 'b'])
print(d)
input()
#выведет: {'a': None, 'b': None}

d = dict.fromkeys(['a', 'b'], 100)
print(d)
input()
#выведет: {'a': 100, 'b': 100}

#4.C помощью генераторов словарей
d = {a: a ** 2 for a in range(7)}
print(d)
input()
#выведет:{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36}

Функции/методы словаря

dict() — создание словаря;

len() — возвращает число пар;

clear() — удаляет все значения из словаря;

copy() — создает псевдокопию словаря;

deepcopy() — создает полную копию словаря;

fromkeys() — создание словаря;

get() — получить значение по ключу;

has_key() — проверка значения по ключу;

items() — возвращает список значений;

iteriyems() — возвращает итератор;

keys() — возвращает список ключей;

iterkeys() — возвращает итератор ключей;

pop() — извлекает значение по ключу;

popitem() — извлекает произвольное значение;

update() — изменяет словарь;

values() — возвращает список значений;

itervalues() — возвращает итератор на список значений.

in — оператор, проверяет наличие значения по ключу;

del — оператор, удаляет пару по ключу;

dict() — конструирует словарь с помощью последовательности.

Доступ к значениям словаря

Пример вывода значения определенного ключа словаря:

dict = {
    "apple" : "яблоко",
    "bold" : "жирный",
    "bus" : "автобус",
    "cat" : "кошка",
    "car" : "автомобиль"}
print(dict["bus"])
input()
# выведет: автобус

Выведем все ключи и значения словаря в более или менее удобном для пользователя формате:

dict = {
    "apple" : "яблоко",
    "bold" : "жирный",
    "bus" : "автобус",
    "cat" : "кошка",
    "car" : "автомобиль"}
for item in dict:
    print(item, " => ", dict[item])
input()

# выведет:
apple  =>  яблоко
bold  =>  жирный
bus  =>  автобус
cat  =>  кошка
car  =>  автомобиль

Доступ к значениям словаря похож на индексирование, только здесь мы вместо индекса используем ключ, а не номер элемента.

Если обратиться к ключу, которого нет в словаре, то будет сгенерировано сообщение об ошибке.

Программа “Словарь”

Для закрепление материала создадим небольшую программу “Словарь”. Листинг программы:

# словарь заполнен по умолчанию
dict = {
    "apple" : "яблоко",
    "bold" : "жирный",
    "bus" : "автобус",
    "cat" : "кошка",
    "car" : "автомобиль"}

print("=" * 15, "Словарь", "=" * 15)
help_message = """
s - Поиск слова в словаре
a - Добавит новое слово
r - Удалить слово
k - Вывод всех ключей в словаре
d - Вывод всего словаря
h - Отображение этой подсказки
q - Выход
"""

choice = ""
while choice != "q":
    choice = input("(h - справка)>> ")
    if choice == "s":
       word = input("Введите слово: ")
       res = dict.get(word, "Нет такого слова!")
       print(res)
    elif choice == "a":
       word = input("Введите слово: ")
       value = input("Введите перевод: ")
       dict[word] = value
       print("Слово добавлено!")
    elif choice == "r":
       word = input("Введите слово: ")
       del dict[word]
       print("Слово ", word, " удалено")
    elif choice == "k":
       print(dict.keys())
    elif choice == "d":
       for word in dict:
          print(word, ": ", dict[word])
    elif choice == "h":
       print(help_message)
    elif choice == "q":
       continue
    else:
       print("Нераспознанная команда. Введите h для справки")

Наш словарь, уже заполненный данными по умолчанию. При каждой итерации мы выводим подсказку (h – справка)>> и читаем ввод пользователя. Поиск слова в словаре мы производим с помощью метода get():

 if choice == "s":
       word = input("Введите слово: ")
       res = dict.get(word, "Нет такого слова!")
       print(res)

Добавление слова осуществляется так:

 elif choice == "a":
       word = input("Введите слово: ")
       value = input("Введите перевод: ")
       dict[word] = value
       print("Слово добавлено!")

Вывод словаря осуществляется в удобном формате:

 elif choice == "d":
       for word in dict:
          print(word, ": ", dict[word])

При вводе неизвестной команды программа выводит соответствующее сообщение, а при вводе “q” происходит выход из программы:

 elif choice == "q":
       continue;
    else:
       print("Нераспознанная команда. Введите h для справки")

При вводе “q” мы вызываем break, чем инициируем переход на следующую итерацию. Далее в цикле while будет проверено значение и произведен выход из цикла.

Вы самостоятельно можете улучшить код данной программы. Пишите в комментариях свои варианты.

 
Поделиться в facebook
Facebook
Поделиться в twitter
Twitter
Поделиться в vk
VK
Поделиться в google
Google+
Поделиться в email
Email

Один ответ к “Словари.”

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Группа в VK

Помощь проекту

Обнаружили опечатку?

Сообщите нам об этом, выделите текст с ошибкой и нажмите Ctrl+Enter, будем очень признательны!

Свежие статьи

Похожие статьи

Связи между моделями.

Связи между моделями.

В нашем проекте есть одна модель под названием “Объявления”. В этой статье мы создадим новый класс модели “Rubric”, которая будет представлять рубрики объявлений. Допишем в

 
Параметры полей и моделей.

Параметры полей и моделей.

Для того, чтобы наша административная панель Django выглядела более понятна для обычного пользователя необходимо указать правильные названия полей. Наша созданная модель представляется непонятной аббревиатурой “Bbs”,

 
Административный web-сайт Django.

Административный web-сайт Django.

Административный web-сайт предоставляет доступ ко всем моделям, объявленным во всех приложениях, что составляют проект. С помощью данной панели можно просматривать, добавлять, править и удалять записи,

 

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: