Словарь (dict) в Python

Словарь – один из самых нужных компонентов Python, который позволяет хранить данные самых разных типов. Его особенность в том, что элементы идентифицируются не по индексам, как в других итерируемых объектах, а по ключам. 

Выглядит это приблизительно так. 

thisdict = {

"brand": "Ford",

"model": "Mustang",

"year": 1964

}

print(thisdict)

Теперь проанализируем этот код. Сначала пишется название словаря, после чего ставится оператор присваивания, а потом – фигурная скобка. С помощью этого знака осуществляется открытие и закрытие словаря. Соответственно, чтобы указать первый элемент, ставится открывающая фигурная скобка и пишется ключ, двоеточие, а потом – значение элемента.

В нашем случае, есть три элемента словаря:

  1. Название марки. В качестве ключа здесь выступает “brand”, а в качестве значения – “Ford”. То есть, название бренда – Ford.
  2. Название модели. Здесь в качестве ключа выступает “model”, а значение модели – “Mustang”.
  3. Год. Этот элемент идентифицируется по ключу “year”. Соответственно, указывается год выпуска – 1964. 

После того, как мы запустим вышеприведенный код, получим такую строку в консоли.

{‘brand’: ‘Ford’, ‘model’: ‘Mustang’, ‘year’: 1964}

С помощью функции print() мы осуществили вывод всего содержимого словаря. Видим, что это осуществляется с помощью фигурных скобок, а не простым перечислением. Так интерпретатор показывает, что это именно словарь. 

Как получить доступ к элементам словаря?

Естественно, по ключу. Синтаксис приблизительно такой же самый, как и у строк, кортежей. Только там в квадратных скобках указывался индекс, а здесь – ключ. Но, поскольку индекс – числовое значение, а ключ – строковое, то необходимо указывать его в кавычках.

x = thisdict[«model»]

Эта строка кода дает возможность получить значение, соответствующее ключу «model». 

Аналогичные ссылки могут осуществляться с помощью метода get()

x = thisdict.get(«model»)

Редактирование элементов словаря

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

Давайте приведем фрагмент кода, в котором мы заменяем значение ключа year на 2018. 

thisdict = {  

"brand": "Ford",

"model": "Mustang",

"year": 1964

}

thisdict["year"] = 2018

print(thisdict)

Разберем этот фрагмент детальнее. Сначала мы объявляем словарь так же, как делали это ранее. Перечисляем его содержимое: название марки, модели, год выпуска.

После этого мы обращаемся к элементу с ключем year и присваиваем ему значение 2018. Если мы попробуем выполнить этот код, получим следующий результат.

{‘brand’: ‘Ford’, ‘model’: ‘Mustang’, ‘year’: 2018}

Выполнение цикла for по словарю

Точно так же, как и с другими итерируемыми объектами, интерпретатор может использовать цикл for, чтобы перебрать его элементы. 

Вследствие его выполнения вы получаете лишь ключи. Если надо получить значения, используется специальный метод. Но обо всем по порядку.

Давайте для начала попробуем вывести ключи элементов, содержащихся в этом словаре: 

for x in thisdict:

    print(x)

Если мы выполним этот код, получим набор следующих значений. 

brand

model

year

А теперь попробуем вывести значения. 

for x in thisdict:  

    print(thisdict[x])

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

Ford

Mustang

1964

Есть еще один способ получить значения словаря. Это функция values().  

for x in thisdict.values():

    print(x)

Можно пройтись и по ключам, и по значениям. Для этого используется функция items()

for x, y in thisdict.items():

    print(x, y)

Если выполнить этот код, то интерпретатор напишет следующие строки.

Длина словаря

С помощью функции len() можно определить количество элементов словаря.

print(len(thisdict))

Если запустить код, в котором есть эта функция, то он покажет количество содержащихся в словаре элементов. Предположим, что здесь используется тот же словарь, который мы создали ранее. В этом случае возвращаться функцией будет число 3. 

Значение, которое выдается этой функцией, всегда относится к строчному типу.

Добавление элементов

В словаре можно не только изменять элементы, но и добавлять новые. Для этого просто объявляется новая переменная, которая принадлежит ему. Синтаксически это выглядит так же, как присваивание нового значения уже существующему элементу. Но при этом ключ пишется тот, которого нет. Элемент будет добавлен автоматически. 

thisdict =  {

"brand": "Ford",

"model": "Mustang",

"year": 1964

}

thisdict["color"] = "red" 

print(thisdict)

При запуске кода будет записано все содержимое словаря.

{‘brand’: ‘Ford’, ‘model’: ‘Mustang’, ‘year’: 1964, ‘color’: ‘red’}

Видим, что теперь в словаре содержится цвет автомобиля.

Удаление элементов

Для удаления элементов используется сразу несколько методов. Каждый из них выполняет свою функцию. Так, с помощью метода pop() программист может удалить элемент, зная его ключ. 

Помимо этого, он возвращает его название.  

thisdict = {

"brand": "Ford",

"model": "Mustang",

"year": 1964

}

thisdict.pop("model")

Если необходимо удалить последний элемент, то для этого удобнее всего использовать функцию popitem(). Поскольку это – метод, то и вызывать ее нужно из объекта словаря. 

thisdict =  {

"brand": "Ford",

"model":  "Mustang",

"year":  1964

}

thisdict.popitem()

Этот метод аргументов не требует, поскольку он имеет очень точное применение.

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

Приведем два примера кода, где это демонстрируется.

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

thisdict =  {

"brand": "Ford",

"model": "Mustang",

"year": 1964

}

del thisdict["model"]

print(thisdict)

А здесь – чтобы удалить словарь целиком. 

thisdict = {

"brand": "Ford",

"model": "Mustang",

"year": 1964

}  

del thisdict  

print(thisdict)  #это вызывает ошибку, так как  "thisdict" больше не существует.

Если нам надо удалить все содержимое словаря, но при этом его оставить, используется ключевое слово dict()

thisdict = {

"brand": "Ford",

"model": "Mustang",

"year": 1964

}

thisdict.clear()  

print(thisdict)

Если попробовать вывести содержимое словаря, то получим просто две фигурные скобки, поскольку никаких элементов в нем содержаться уже не будет. 

Использование конструктора dict() для создания словаря

Если нужно создать новый словарь, то для этого используется функция-конструктор dict(). Ее синтаксис очень простой. В качестве аргументов используются переменные, обозначающие ключ и его значение.

Значительно проще изобразить это на примере. 

thisdict = dict(brand="Ford", model="Mustang", year=1964)

# обратите внимание, ключевые слова не являются строками

# обратите внимание на использование "рвно", вместо двоеточия для задания

print(thisdict)

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

Другие методы словаря

Словарь – это сложный объект, использование которого требует знания множества методов. Рассмотрим самые распространенные из них.

copy(). С помощью этого метода мы можем получить такой же словарь, как и тот, с которого делается копия. Чтобы использовать метод, нужно его присвоить переменной, которая будет названием вновь созданного словаря.  

dict_sample = {

  "Company": "Toyota", 

  "model": "Premio", 

  "year": 2012 

} 

x = dict_sample.copy() 




print(x)

Мы создали словарь, который затем скопировали с использованием метода copy(). Как видим, мы аргументов не использовали, потому что в них нет потребности. Словарь автоматически присваивается той переменной, из которой он вызывался. Главное – делать это непосредственно с того словаря, который надо скопировать.

Этот метод удобно использовать, когда нужно внести изменения в содержимое объекта, но имея возможность откатить все назад.

fromkeys(). С помощью этого метода мы получаем словарь с определенными ключами и значениями. Синтаксис метода очень простой. 

В качестве аргумента используются итерируемые объекты, из которых будут создаваться ключи и значения нового словаря. 

Также есть опциональный аргумент value, который используется для ввод значения по умолчанию для всех ключей. 

Допустим, перед нами была поставлена задача сгенерировать словарь, в котором будет три имени людей, которым 25 лет. В таком случае в качестве первого аргумента используется список итерируемый объект с именами людей, а во втором записывается возраст, который присваивается по умолчанию. Поскольку всем людям у нас 25 лет, то соответствующее значение используется в качестве опционального аргумента. 

name = ('John', 'Nicholas', 'Mercy') 

age = 25 




dict_sample = dict.fromkeys(name, age) 




print(dict_sample)

Если запустить этот код, то интерпретатор выдаст словарь, в котором будут такие значения.

{‘John’: 25, ‘Mercy’: 25, ‘Nicholas’: 25}

Метод очень удобно использовать, когда нужно автоматически сгенерировать словарь на основе существующих значений.

setdefault(). Применение этого метода происходит тогда, когда необходимо найти значение элемента, ключ которого мы знаем. 

Синтаксис метода:

dictionary.setdefault(keyname, value)

Параметр keyname является обязательным, а значение по умолчанию (второй) – нет. Если словарь уже содержит ключ, то использовать параметр value бессмысленно.

ОфисГуру
Adblock
detector