урок по работе со словарями для начинающих ~ PythonRu
Предыдущий урок: Множества (set)
Словарь — неупорядоченная последовательность, гибким к изменениям и индексированным. В Python словари пишутся в фигурных скобках, и состоят из ключей и значений.
Создадим и выведем словарь:
thisdict = {
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
print(thisdict)
Вывод:
{'brand': 'Ford', 'model': 'Mustang', 'year': 1964}
Доступ к элементам
Вы можете получить доступ к элементам словаря ссылаясь на его ключевое название.
Получим значение по ключу “model” :
x = thisdict["model"]
Существует так же метод под названием get()
который даст вам тот же результат.
x = thisdict.get("model")
Изменить значение
Вы можете поменять значение указанного элемента ссылаясь на ключевое название.
Поменяем “year” на “2018”:
thisdict = {
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
thisdict["year"] = 2018
print(thisdict)
Вывод:
{'brand': 'Ford', 'model': 'Mustang', 'year': 2018}
Цикл 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)
Вывод:
Ford
Mustang
1964
Пройдем по ключам и значениям, используя функцию items()
:
for x, y in thisdict.items():
print(x, y)
Вывод:
brand Ford
model Mustang
year 1964
Длина словаря
Для того, чтобы определить сколько элементов есть в словаре, используйте метод 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
удаляет элемент по ключу:
thisdict = {
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
del thisdict["model"]
print(thisdict)
Вывод:
{'brand': 'Ford', 'year': 1964}
Ключевое слово del
может так же удалить полностью весь словарь:
thisdict = {
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
del thisdict
print(thisdict)
Ключевое слово clear()
очищает словарь:
thisdict = {
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
thisdict.clear()
print(thisdict)
Вывод:
{}
Конструктор dict()
Вы так же можете использовать конструктор dict()
для создания нового словаря.
thisdict = dict(brand="Ford", model="Mustang", year=1964)
print(thisdict)
Вывод:
{'brand': 'Ford', 'model': 'Mustang', 'year': 1964}
Методы словаря
В Python существует набор встроенных методов, с помощью которых вы можете работать со словарями.
Метод | Значение |
---|---|
clear() | Удаляет все элементы из словаря |
copy() | Делает копию словаря |
fromkeys() | Возвращает словарь с указанными ключами и значениями |
get() | Возвращает значение по ключу |
items() | Возвращает список, содержащий tuple для каждой пары ключ-значение |
keys() | Возвращает список, содержащий ключи словаря |
pop() | Удаляет элементы по ключу |
popitem() | Удаляет последнюю пару ключа со значением |
setdefault() | Задает значение по ключу. Если ключа нет в словаре, добавляет его с указанным значением или None |
update() | Обновляет словарь, добавляя пары ключ-значение |
values() | Возвращает список всех значений в словаре |
Далее: Условные выражения и конструкция if
В Python есть много встроенных структур данных, используемых для хранения разных типов информации. Словарь (dict
) — одна из таких структур, которая хранит данные в формате пар ключ-значение. Получить доступ к значениям словаря Python можно с помощью ключей. Этот материал посвящен подробному обсуждению словаря.
Создание словаря
Для создания словаря в Python необходимо передать последовательность элементов внутри фигурных скобок {}
, разделив их запятыми (,
). Каждый элемент имеет ключ и значение, выраженное парой «ключ: значение».
Значения могут быть представлять собой любые типы данных и повторяться, но ключи обязаны быть уникальными.
Следующие примеры показывают, как создавать словари Python:
Создание пустого словаря:
dict_sample = {}
Cловарь, где ключи являются целыми числами:
dict_sample = {1: 'mango', 2: 'pawpaw'}
Создание словаря с ключами разных типов:
dict_sample = {'fruit': 'mango', 1: [4, 6, 8]}
Можно также создать словарь, явно вызвав метод dict()
:
dict_sample = dict({1:'mango', 2:'pawpaw'})
Словарь можно создать с помощью последовательности, как в примере внизу:
dict_sample = dict([(1,'mango'), (2,'pawpaw')])
Словари могут быть вложенными. Это значит, что можно создавать словари внутри существующего словаря. Например:
dict_sample = {
1: {'student1': 'Nicholas', 'student2': 'John', 'student3': 'Mercy'},
2: {'course1': 'Computer Science', 'course2': 'Mathematics', 'course3': 'Accounting'}
}
Чтобы вывести содержимое словаря, можно использовать функцию print()
и передать название словаря в качестве аргумента. Например:
dict_sample = {
"Company": "Toyota",
"model": "Premio",
"year": 2012
}
print(dict_sample)
Вывод:
{'Company': 'Toyota', 'model': 'Premio', 'year': 2012}
Доступ к элементами
Чтобы получить доступ к элементам словаря, нужно передать ключ в квадратных скобках []
. Например:
dict_sample = {
"Company": "Toyota",
"model": "Premio",
"year": 2012
}
x = dict_sample["model"]
print(x)
Вывод:
Premio
Был создан словарь dict_sample
. Затем была создана переменная x
. Ее значение — это значение ключа ["model"]
из словаря.
Вот другой пример:
dict = {'Name': 'Mercy', 'Age': 23, 'Course': 'Accounting'} print("Student Name:", dict['Name']) print("Course:", dict['Course']) print("Age:", dict['Age'])
Вывод:
Student Name: Mercy
Course: Accounting
Age: 23
Объект словаря также имеет функцию get()
, которой можно пользоваться для доступа к элементам словаря. Ее нужно добавлять к словаря через точку и затем передавать название ключа как аргумент функции. Например:
dict_sample = {
"Company": "Toyota",
"model": "Premio",
"year": 2012
}
x = dict_sample.get("model")
print(x)
Вывод:
Premio
Теперь вы знаете, как получать доступ к элементам словаря с помощью разных методов. В следующем разделе речь пойдет о добавлении новых элементов в уже существующий словарь.
Добавление элементов
Существует множество способов для добавления новых элементов в словарь. Можно использовать новый ключ и присвоить ему значение. Например:
dict_sample = {
"Company": "Toyota",
"model": "Premio",
"year": 2012
}
dict_sample["Capacity"] = "1800CC"
print(dict_sample)
Вывод:
{'Capacity': '1800CC', 'year': 2012, 'Company': 'Toyota', 'model': 'Premio'}
У нового элемента ключ "Capacity"
и значение — "180CC"
. Он был добавлен в качестве первого элемента словаря.
Вот другой пример. Для начала нужно создать пустой словарь:
MyDictionary = {}
print("An Empty Dictionary: ")
print(MyDictionary)
Вывод:
An Empty Dictionary:
Словарь ничего не возвращает, потому что в нем ничего не хранится. Добавим в нему элементы, один за одним:
MyDictionary[0] = 'Apples'
MyDictionary[2] = 'Mangoes'
MyDictionary[3] = 20
print("\n3 elements have been added: ")
print(MyDictionary)
Вывод:
3 elements have been added: {0: 'Apples', 2: 'Mangoes', 3: 20}
Для добавления элементов были отдельно указаны ключи и соответствующие значения. Например:
MyDictionary[0] = 'Apples'
В этом примере 0
является ключом, а "Apples"
— значение.
Можно даже добавить несколько значений для одного ключа. Например:
MyDictionary['Values'] = 1, "Pairs", 4
print("\n3 elements have been added: ")
print(MyDictionary)
Вывод:
3 elements have been added: {'Values': (1, 'Pairs', 4)}
В этом примере название ключа — "Value"
, а все что после знака =
— его значения в формате множества (Set
).
Помимо добавления новых элементов в словарь, их можно обновлять или изменять. Об этом в следующем разделе.
Обновление элементов
После добавления значения в словарь существующий элемент словаря можно изменить. Для изменения значения используется соответствующий ключ. Например:
dict_sample = { "Company": "Toyota", "model": "Premio", "year": 2012 } dict_sample["year"] = 2014 print(dict_sample)
Вывод:
{'year': 2014, 'model': 'Premio', 'Company': 'Toyota'}
В этом примере видно, что было обновлено значение ключа "year"
с 2012
на 2014
.
Удаление элементов
Удалить элемент из словаря можно несколькими способами. В этом разделе они будут рассмотрены по одному:
Ключевое слово del можно использовать для удаления элемента с конкретным ключом. Например:
dict_sample = {
"Company": "Toyota",
"model": "Premio",
"year": 2012
}
del dict_sample["year"]
print(dict_sample)
Вывод:
{'Company': 'Toyota', 'model': 'Premio'}
Вызывается ключевое слово del
, а следом за ним — название словаря. В квадратных скобках следом за словарем идет ключ элемента, который требуется удалить. В этом примере это "year"
. Запись "year"
удаляется из словаря.
Другой способ удалить пару ключ-значение — функция pop()
с ключом записи в виде аргумента. Например:
dict_sample = {
"Company": "Toyota",
"model": "Premio",
"year": 2012
}
dict_sample.pop("year")
print(dict_sample)
Вывод:
{'Company': 'Toyota', 'model': 'Premio'}
Функция pop()
была вызвана добавлением ее к названию словаря. В этом случае будет удалена запись с ключом "year"
.
Функция popitem()
удаляет последний элемент в словаре. Для нее не нужно указывать конкретный ключ. Примеры:
dict_sample = {
"Company": "Toyota",
"model": "Premio",
"year": 2012
}
dict_sample.popitem()
print(dict_sample)
Вывод:
{'Company': 'Toyota', 'model': 'Premio'}
Последней записью в словаре была "year"
. Она пропала из словаря после вызова функции popitem()
.
Что делать, если нужно удалить целый словарь? Это будет сложно и займет много времени, если пользоваться этими методами к каждому ключу. Вместо этого можно использовать ключевое слово del
для целого словаря. Например:
dict_sample = {
"Company": "Toyota",
"model": "Premio",
"year": 2012
}
del dict_sample
print(dict_sample)
Вывод:
NameError: name 'dict_sample' is not defined
Код вернет ошибку, потому что функция print()
пытается получить доступ к словарю, который уже не существует.
В определенных случаях может потребоваться удалить все элементы словаря, оставив его пустым. Этого можно добиться, воспользовавшись функцией clear()
:
dict_sample = {
"Company": "Toyota",
"model": "Premio",
"year": 2012
}
dict_sample.clear()
print(dict_sample)
Вывод:
{}
Код вернет пустой словарь, поскольку все его элементы уже удалены.
Другие распространенные методы словарей
Метод len()
С помощью этого метода можно посчитать количество элементов в словаре. Например:
dict_sample = {
"Company": "Toyota",
"model": "Premio",
"year": 2012
}
print(len(dict_sample))
Вывод:
3
В этом словаре три записи, поэтому метод вернет 3.
Метод copy()
Этот метод возвращает копию существующего словаря. Например:
dict_sample = {
"Company": "Toyota",
"model": "Premio",
"year": 2012
}
x = dict_sample.copy()
print(x)
Вывод:
{'Company': 'Toyota', 'year': 2012, 'model': 'Premio'}
Была создана копия словаря dict_sample
. Она присвоена переменной x
. Если вывести x
в консоль, то в ней будут те же элементы, что и в словаре dict_sample
.
Это удобно, потому что изменения в скопированном словаре не затрагивают оригинальный словарь.
Метод items()
Этот метод возвращает итерируемый объект. Такой объект содержит пары ключ-значение для словаря по аналогии с кортежами в списке. Метод используется, когда нужно перебрать значения словаря.
Этот метод нужно вызывать вместе со словарем, как в примере ниже:
dict_sample = {
"Company": "Toyota",
"model": "Premio",
"year": 2012
}
for k, v in dict_sample.items():
print(k, v)
Вывод:
('Company', 'Toyota')
('model', 'Premio')
('year', 2012)
Объект, который возвращает items()
, можно использовать, чтобы показать изменения в словаре. Вот как это работает.
dict_sample = {
"Company": "Toyota",
"model": "Premio",
"year": 2012
}
x = dict_sample.items()
print(x)
dict_sample["model"] = "Mark X"
print(x)
Вывод:
dict_items([('Company', 'Toyota'), ('model', 'Premio'), ('year', 2012)])
dict_items([('Company', 'Toyota'), ('model', 'Mark X'), ('year', 2012)])
Вывод демонстрирует, что когда вы меняете значение в словаре, объекты элементов также обновляются.
Метод fromkeys()
Этот метод возвращает словарь с указанными ключами и значениями. У него следующий синтаксис:
dictionary.fromkeys(keys, value)
Значение требуемого параметра keys
— итерируемые объекты. Оно отвечает за ключи нового словаря. Значение для параметра value
указывать необязательно. Оно отвечает за значение по умолчанию для всех ключей. По умолчанию — None
.
Предположим, что нужно создать словарь с тремя ключами и одинаковым значением. Это можно сделать следующим образом:
name = ('John', 'Nicholas', 'Mercy')
age = 25
dict_sample = dict.fromkeys(name, age)
print(dict_sample)
Вывод:
{'John': 25, 'Mercy': 25, 'Nicholas': 25}
В коде вверху определены ключи и одно значение. Метод fromkeys()
перебирает ключи и объединяет их со значением для создания заполненного словаря.
Значение для параметра keys
является обязательным. В следующем примере показано, что происходит, если параметр values
не определен:
name = ('John', 'Nicholas', 'Mercy')
dict_sample = dict.fromkeys(name)
print(dict_sample)
Вывод:
{'John': None, 'Mercy': None, 'Nicholas': None}
Используется значение по умолчанию, None
.
Метод setdefault()
Этот метод используется, когда нужно получить значение элемента с конкретным ключом. Если ключ не найден, он будет вставлен в словарь вместе с указанным значением.
У метода следующий синтаксис:
dictionary.setdefault(keyname, value)
В этой функции параметр keyname
является обязательным. Он обозначает название ключа, значение которого нужно вернуть. Параметр value
необязательный. Если в словаре уже есть ключ, параметр не будет иметь никакого эффекта. Если ключ не существует, тогда значение функции станет значением ключа. Значение по умолчанию — None
.
Например:
dict_sample = {
"Company": "Toyota",
"model": "Premio",
"year": 2012
}
x = dict_sample.setdefault("color", "Gray")
print(x)
Вывод:
Gray
В словаре нет ключа color
. Метод setdefault()
вставляет этот ключ вместе со значением "Gray"
.
Следующий пример показывает, как работает метод, если такой ключ уже есть:
dict_sample = {
"Company": "Toyota",
"model": "Premio",
"year": 2012
}
x = dict_sample.setdefault("model", "Allion")
print(x)
Вывод:
Premio
Значение "Allion"
не повлияло на словарь, потому что у ключа уже есть значение.
Метод keys()
Этот метод также возвращает итерируемый объект. Он является списком всех ключей в словаре. Как и метод items()
, этот отображает изменения в самом словаре.
Для использования метода нужно всего лишь использовать его с именем словаря, как показано ниже:
dictionary.keys()
Например:
dict_sample = {
"Company": "Toyota",
"model": "Premio",
"year": 2012
}
x = dict_sample.keys()
print(x)
Вывод:
dict_keys(['model', 'Company', 'year'])
Часто этот метод используется, чтобы перебрать все ключи в словаре:
dict_sample = {
"Company": "Toyota",
"model": "Premio",
"year": 2012
}
for k in dict_sample.keys():
print(k)
Вывод:
Company
model
year
Выводы
Это все, что нужно знать о словарях Python. Они хранят информацию в парах «ключ: значение». «Ключ» выступает идентификатором объекта, а «значение» — это определенные данные. В Python много функций, которые могут быть использовать для извлечения и обработки данных. В этой статье были рассмотрены способы создания, изменения и удаления словаря, а также самые распространенные методы для работы с этим типом данных.
Словари в Python — Программирование с нуля
Из этой статьи вы узнаете все о словарях в языке программирования Python; как они создаются, доступ к элементам, добавление и удаление элементов, а также различные встроенные методы Python.
Что такое словарь в Python?
Словарь Python представляет собой неупорядоченную коллекцию элементов. В то время как другие составные типы данных имеют только значение как элемент, словарь имеет пару ключ:значение.
Словари оптимизированы для получения значений, когда ключ известен.
Как создать словарь?
Создать словарь очень просто, нужно поместить элементы в виде пар ключ:значение в фигурные скобки {}, разделяя их запятой.
Каждый элемент словаря имеет ключ и соответствующее значение.
Хотя значения могут быть любого типа данных и могут повторяться, ключи должны быть неизменного типа (строка, число или кортеж с неизменяемыми элементами) и должны быть уникальными для этого словаря.
# пустой словарь my_dict = {} # словарь с ключами типа integer (число) my_dict = {1: 'apple', 2: 'ball'} # словарь с со смешенным типом ключей my_dict = {'name': 'John', 1: [2, 4, 3]} # создание словаря при помощи dict() my_dict = dict({1:'apple', 2:'ball'})
Как вы можете видеть выше, мы также можем создать словарь, используя встроенную функцию dict().
Как получить доступ к элементам из словаря?
В то время как индексирование используется с другими типами контейнеров для доступа к значениям, словарь использует ключи. Ключ можно использовать либо в квадратных скобках, либо с помощью метода get().
Разница при использовании get() заключается в том, что он возвращает None вместо KeyError, если ключ не найден.
my_dict = {'name':'Jack', 'age': 26} # Результат: Jack print(my_dict['name']) # Результат: 26 print(my_dict.get('age'))
Как изменить или добавить элементы в словарь?
Словарь — изменяемый тип данных. Мы можем добавить новые элементы или изменить значение существующих элементов, используя оператор присваивания.
Если ключ уже присутствует, значение обновляется, иначе в словарь добавляется новая пара ключ:значение.
my_dict = {'name':'Jack', 'age': 26} # обновляем значение my_dict['age'] = 27 # Результат: {'age': 27, 'name': 'Jack'} print(my_dict) # добавляем элемент my_dict['address'] = 'Downtown' # Результат: {'address': 'Downtown', 'age': 27, 'name': 'Jack'} print(my_dict)
Как удалить элементы из словаря Python?
Мы можем удалить определенный элемент в словаре, используя метод pop(). Этот метод удаляет элемент с предоставленным ключом и возвращает значение.
Метод popitem() может использоваться для удаления и возврата произвольного элемента (ключ, значение) из словаря. Все элементы сразу можно удалить, используя метод clear().
Мы также можем использовать ключевое слово del для удаления отдельных элементов или всего словаря.
# создаем словарь squares = {1:1, 2:4, 3:9, 4:16, 5:25} # удалить определенный элемент словаря # результат: 16 print(squares.pop(4)) # результат: {1: 1, 2: 4, 3: 9, 5: 25} print(squares) # удалить случайный элемент из словаря # результат: (1, 1) print(squares.popitem()) # результат: {2: 4, 3: 9, 5: 25} print(squares) # удалить определенный элемент словаря del squares[5] # результат: {2: 4, 3: 9} print(squares) # удалить все из словаря squares.clear() # результат: {} print(squares) # удалить словарь del squares # выведет ошибку # print(squares)
Методы словарей Python
Методы, доступные для использования со словарем, приведены в таблице ниже. Некоторые из них уже были использованы в приведенных выше примерах.
- clear() — Удалить все элементы из словаря.
- copy() — Возвращает копию словаря.
- fromkeys(seq [, v]) — Возвращает новый словарь с ключами от seq и значением, равным v (по умолчанию None).
- get(key [, d]) — Возвращает значение ключа. Если ключ не существует, возвращает d (по умолчанию None).
- items() — Возвращает новый вид элементов словаря (ключ, значение).
- keys() — Возвращает новый вид ключей словаря.
- pop(key [, d]) — Удалить элемент с ключом и вернуть его значение или d, если ключ не найден. Если d не указано и ключ не найден, выдается KeyError.
- popitem() — Удалить и вернуть произвольный элемент (ключ, значение). Вызывает KeyError, если словарь пуст.
- setdefault(ключ [, d]) — Если ключ находится в словаре, вернуть его значение. Если нет, введите ключ со значением d и верните d (по умолчанию None).
- update([другое]) — Обновить словарь парами ключ / значение из других, перезаписывая существующие ключи.
- values() — Возвращает новое представление значений словаря
Вот несколько примеров использования этих методов.
marks = {}.fromkeys(['Math','English','Science'], 0) # результат: {'English': 0, 'Math': 0, 'Science': 0} print(marks) for item in marks.items(): print(item) # результат: ['English', 'Math', 'Science'] list(sorted(marks.keys()))
Генератор словаря Python
Генератор словаря — это элегантный и лаконичный способ создания нового словаря из итерируемых объектов в Python.
Генерация словаря состоит из пары выражений (ключ: значение), за которой следует инструкция внутри фигурных скобок {}.
Вот пример создания словаря, в котором каждый элемент является парой числа и его квадрата.
squares = {x: x*x for x in range(6)} # Результат: {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25} print(squares)
Другие операции со словарями в Python
Проверка на на наличие элемента в словаре
Мы можем проверить, находится ли ключ в словаре или нет, используя ключевое слово in. Обратите внимание, что тест на наличие элемента предназначен только для ключей, а не для значений.
squares = {1: 1, 3: 9, 5: 25, 7: 49, 9: 81}
# результат: True print(1 in squares) # результат: True print(2 not in squares) # проверка работает только для ключей, а не для значений # результат: False print(49 in squares)
Перебор элементов словаря
Используя цикл for, мы можем перебирать элементы в словаре.
squares = {1: 1, 3: 9, 5: 25, 7: 49, 9: 81} for i in squares: print(squares[i])
Встроенные функции и словари
Встроенные функции, такие как all(), any(), len(), cmp(), sorted() и т.д., обычно используются со словарем для выполнения различных задач.
- all() — Возвращает True, если все ключи словаря истинны (или если словарь пуст).
- any() — Возвращает True, если любой ключ словаря равен true. Если словарь пуст, вернет False.
- len() — Возвращает длину (количество элементов) в словаре.
- cmp() — Сравнивает элементы двух словарей.
- sorted() — Возвращает новый отсортированный список ключей в словаре.
Вот несколько примеров, которые используют встроенные функции Python для работы со словарем.
squares = {1: 1, 3: 9, 5: 25, 7: 49, 9: 81} # результат: 5 print(len(squares)) # результат: [1, 3, 5, 7, 9] print(sorted(squares))
Программирование на Python: Часть 4. Словари
Сергей Яковлев
Опубликовано 09.08.2010
Серия контента:
Этот контент является частью # из серии # статей:
https://www.ibm.com/developerworks/ru/library/?series_title_by=**auto**
Следите за выходом новых статей этой серии.
Этот контент является частью серии:
Следите за выходом новых статей этой серии.
После списков словарь является самым гибким встроенным типом. Если список — это упорядоченная коллекция, то словарь — неупорядоченная. Основные особенности словарей:
- Доступ осуществляется по ключу, а не по индексу. По аналогии со списком, в словаре можно получить доступ к элементам в цикле по ключам.
- Значения словаря хранятся в неотсортированном порядке, более того, ключи могут храниться не в том порядке, в котором они добавляются.
- По аналогии со списками, словарь может хранить вложенные словари. Словарь может хранить в качестве значений объекты любого типа (heterogeneous). Ключ в словаре — immutable тип, может быть строкой, целым числом, float либо кортежем, состоящим из указанных типов.
- Словари реализованы как хеш-таблицы с быстрым доступом.
- Словари, так же как и списки, хранят ссылки на объекты, а не сами объекты.
Сегодня мы рассмотрим следующие темы.
- Что такое словарь.
- Функции/методы словаря.
- Операции со словарем.
- Примеры.
1. Что такое словарь
Словарь (dictionary) — это ассоциативный массив или хеш. Это неупорядоченное множество пар ключ: значение с требованием уникальности ключей. Пара фигурных скобок {}
создает пустой словарь. В отличие от последовательностей, доступ к элементам словаря производится по ключу, а не по индексу, ключ может быть любого типа, ключ не допускает изменений.
Основные операции над словарем — сохранение с заданным ключом и извлечение по нему значения. Также можно удалить пару key: value
с помощью инструкции del
.
Метод keys()
для словаря возвращает список всех используемых ключей в произвольном порядке; для сортировки списка нужно применить метод sort()
. Для определения наличия определенного ключа есть метод has_key()
, который в версии 3.0 успеет устареть — вместо него есть оператор in
. Добавление нового объекта в словарь не требует предварительных проверок: если ранее ключу уже соответствовало некоторое значение, оно будет перезаписано.
Пример — словарь в качестве телефонного справочника:
>>> dic = {'vanya' : 23323223, 'smith' : 32232332} >>> dic['fedya'] = 33332222 >>> dic {'vanya': 23323223, 'fedya': 33332222, 'smith': 32232332} >>> dic['smith'] 32232332 >>> del dic['vanya'] >>> dic {'fedya': 33332222, 'smith': 32232332} >>> dic.keys() ['fedya', 'smith'] >>> dic.has_key('fedya') True
Создать словарь можно несколькими способами:
- Обычное выражение — оно удобно, если словарь статичен:
D = {'name': 'mel', 'age': 45}
- Динамический вариант создания на лету:
D = {} D['name'] = 'mel' D['age'] = 45
- С помощью функции dict() — ключи при этом должны быть строками. С помощью этой функции можно избавить себя от обязательного условия заключать ключ в кавычки. В примере приведены четыре варианта создания одного и того же словаря:
d1 = dict(id=1948, name="Washer", size=3) d2 = dict({"id": 1948, "name": "Washer", "size": 3}) d3 = dict([("id", 1948), ("name", "Washer"), ("size", 3)]) d4 = dict(zip(("id", "name", "size"), (1948, "Washer", 3)))
- С помощью
fromkeys()
— создает словарь по списку ключей с пустыми значениями:D = {}.fromkeys(['name', 'age'],123)
- С помощью конструктора:
d = dict((x, x**2) for x in xrange(5))
2. Функции/методы словаря
dict()
— создание словаря;
len()
— возвращает число пар;
clear()
— удаляет все значения из словаря;
copy()
— создает псевдокопию словаря;
deepcopy()
— создает полную копию словаря;
fromkeys()
— создание словаря;
get()
— получить значение по ключу;
has_key()
— проверка значения по ключу;
items()
— возвращает список значений;
iteriyems()
— возвращает итератор;
keys()
— возвращает список ключей;
iterkeys()
— возвращает итератор ключей;
pop()
— извлекает значение по ключу;
popitem()
— извлекает произвольное значение;
update()
— изменяет словарь;
values()
— возвращает список значений;
itervalues()
— возвращает итератор на список значений.
in
— оператор, проверяет наличие значения по ключу;
del
— оператор, удаляет пару по ключу;
dict()
— конструирует словарь с помощью последовательности.
Например, создать словарь с помощью списка кортежей:
>>> items = [('name','sveta'),('age',20)] >>> d = dict(items) >>> d {'age': 20, 'name': 'sveta'} >>> len(d) 2
in()
— оператор проверки вхождения.
Пример: база данных может быть заполнена в виде словаря.
Проверить наличие в базе данных телефона по имени:
people = {'Alice': {'phone': '2341', 'addr': 'Foo drive 23' }, 'Beth': {'phone': '9102', 'addr': 'Bar street 42'}} name = 'Alice' key = 'phone' if name in people: print "%s phone is %s" % (name, people[name][key]) >>> Alice phone is 2341 copy()
Пример создания копии словаря:
>>> x = {"user":'admin','attr':[1,2,3]} >>> y = x.copy() >>> y {'user': 'admin', 'attr': [1, 2, 3]}
Метод copy()
не делает полного копирования: если мы, например, сделаем операцию:
>>> x['attr'].remove(1)
то с удивлением обнаружим, что удаление атрибута произойдет также и в копии.
Чтобы этого не произошло, нужно использовать метод deepcopy()
.
>>> from copy import deepcopy >>> y = x.deepcopy()
fromkeys()
— создает словарь по заданным ключам с пустыми значениями:
>>> {}.fromkeys(['name', 'age']) {'age': None, 'name': None}
Можно все значения заполнить по умолчанию:
>>> {}.fromkeys(['name', 'age'],123) {'age': 123, 'name': 123}
get()
— получает значение по ключу, в случае отсутствия дает None
:
>>> d = {} >>> print d.get('name') None
has_key()
— проверяет, есть ли в словаре значение по данному ключу:
>>> d = {} >>> d.has_key('name') False
items()
— возвращает список значений:
for key, value in d.items(): print(key, value)
iteriyems()
— возвращает итератор — выдает тот же результат:
>>> for k, v in d.iteritems(): ... print k, v
keys()
— возвращает список ключей;
iterkeys()
— возвращает итератор ключей:
>>> d.keys() ['url', 'title'] >>> d.iterkeys() <dictionary-keyiterator object at 0xb7c4dd00>
pop()
— извлекает значение по ключу с последующим удалением:
>>> d.pop('title') >>> d {'url': 'http://www.python.org'}
popitem()
— извлекает произвольное значение с последующим удалением:
>>> d = {'title': 'Python Web Site', 'url': 'http://www.python.org', 'www': 'python'} >>> d.popitem() >>> d {'www': 'python', 'title': 'Python Web Site'}
update()
— изменяет значение по ключу:
>>> d2 = {'www':'python.org'} >>> d.update(d2) >>> d {'www': 'python.org', 'title': 'Python Web Site'}
values()
— возвращает список значений:
>>> d={} >>> d[1]=1 >>> d[2]=2 >>> d[3]=3 >>> d {1: 1, 2: 2, 3: 3} >>> d.values() [1, 2, 3]
del
— оператор удаляет пару ключ: значение по ключу:
>>> del d[2] >>> d {1: 1, 3: 3}
3. Операции
Поскольку словари представляют собой мапы (map), а не последовательности, к ним нельзя применить конкатенацию или срезы.
К словарям можно применять стандартные операторы сравнения:
<, <=, ==, !=, >=, >
Для того чтобы сделать проход по ключам словаря, используем for:
>>> table = {'Python': 'Guido van Rossum', ... 'Perl': 'Larry Wall', ... 'Tcl': 'John Ousterhout' } >>> for lang in table: ... print(lang, table[lang]) .. >>> Tcl John Ousterhout >>> Python Guido van Rossum >>> Perl Larry Wall
Словари хорошо подходят для хранения многомерных массивов или матриц:
>>> Matrix = {} >>> Matrix[(2, 3, 4)] = 88 >>> Matrix[(7, 8, 9)] = 99 >>> >>> X = 2; Y = 3; Z = 4 >>> Matrix[(X, Y, Z)] 88 >>> Matrix {(2, 3, 4): 88, (7, 8, 9): 99}
С помощью словарей можно хранить структурированную информацию в виде записей:
>>> man = {'name': 'Serg', ... 'jobs': ['programmer', 'writer'], ... 'web': 'www.iakovlev.org', ... 'home': {'city': 'Moscow', 'zip':129000}} >>> man['name'] Serg >>> man['jobs'][1] 'writer'
4. Примеры
Пример 1. Подсчитаем, сколько раз в строке встречается каждый символ:
def histogram(s): d = dict() for c in s: if c not in d:d[c] = 1 else:d[c] += 1 return d hist = histogram('how many times') >>> {'a': 1,'e': 1,'i': 1,'h': 1,'m': 2,'o': 1,'n': 1,'s': 1,'t': 1,'w': 1,'y': 1}
Если нам нужно инвертировать данный словарь и в качестве ключа поставить частоту:
def invert_dict(d): inv = dict() for key in d: val = d[key] if val not in inv:inv[val] = [key] else:inv[val].append(key) return inv print invert_dict(hist) >>> {1: ['a', 'e', 'i', 'h', 'o', 'n', 's', 't', 'w', 'y'], 2: [' ', 'm']}
Пример 2. Подсчитать частоту повторов каждого уникального слова в файле:
import string import sys words = {} strip = string.whitespace + string.punctuation + string.digits + "\"'" filename = 'file' for line in open(filename): for word in line.lower().split(): word = word.strip(strip) if len(word) > 2: words[word] = words.get(word, 0) + 1 for word in sorted(words): print("'{0}' occurs {1} times".format(word, words[word]))
Пример 3. Сортировка словаря по ключам:
author = {"php":"Rasmus Lerdorf",\ "perl":"Larry Wall",\ "tcl":"John Ousterhout",\ "awk":"Brian Kernighan",\ "java":"James Gosling",\ "parrot":"Simon Cozens",\ "python":"Guido van Rossum"} #Либо так: langs = author.keys() langs.sort() for language in langs: print language," - ",author[language] #либо так: for key in sorted(author.iterkeys()): print "%s: %s" % (key, author[key]) >>> awk - Brian Kernighan >>> java - James Gosling >>> parrot - Simon Cozens >>> perl - Larry Wall >>> php - Rasmus Lerdorf >>> python - Guido van Rossum >>> tcl - John Ousterhout
Пример 4. Как инвертировать словарь, т.е. поменять ключи со значениями:
def invert_dict_nonunique(d): newdict = {} for k, v in d.iteritems(): newdict.setdefault(v, []).append(k) return newdict d = {'child1': 'parent1','child2': 'parent1','child3': 'parent2','child4': 'parent2'} print invert_dict_nonunique(d) >>> {'parent2': ['child3', 'child4'], 'parent1': ['child1', 'child2']}
Заключение
Можно подвести итоги: словари наряду со списками являются наиболее простыми, гибкими и мощными коллекционными типами. Словарь, как и список, является изменяемым (mutable) типом данных, хотя и содержит неизменяемые ключи и может неограниченно расти. Если вам нужна коллекция с доступом по ключу — словарь подходит для этого лучше всего. Если вам нужна коллекция для хранения произвольных объектов произвольной вложенности — словарь в этом вам поможет.
Код примеров проверялся на версии питона 2.6.
Предыдущая статья. Следующая статья.
Ресурсы для скачивания
Методы словарей на Python
На прошлом уроке, мы научились создавать словари, добавлять и удалять элементы из словаря. Теперь нужно научиться работать со словарями, что-то с ними делать. Для полноценной работы со словарями в Python существует много полезных методов. Некоторые из них, мы сейчас рассмотрим.
Метод clear()
Метод clear() удаляет все элементы из словаря и не принимает никаких параметров.
my_count = {
10: 'десять',
11: 'одиннадцать',
12: 'двенадцать',
13: 'тринадцать'
}my_count.clear()
print(my_count)
{} // возвращает пустой словарь
Метод get()
Метод get() возвращает значение по указанному ключу в параметрах. Название ключа всегда должно быть уникальным. В случае обращения по несуществующему ключу, Python вернет значение None. С помощью метода get(), можно проверять, есть ли такой ключ в словаре. И если есть, то мы получим значение по ключу.
first_count = {
14: 'четырнадцать',
15: 'пятнадцать',
16: 'шестнадцать'
}print(first_count.get(15))
пятнадцать // выведет на экран
Метод pop()
В параметрах метода pop() передается ключ, а возвращается значение.
second_count = {
17: 'семнадцать',
18: 'восемнадцать',
19: 'девятнадцать'
}print(second_count.pop(17))
семнадцать // распечаталось на экране
Из списка удалилась пара целиком. Метод pop() удаляет элемент из словаря, ключ которого, передается в параметрах. Попытка передать элемент без параметра или с несуществующим параметром приведет к возникновению ошибки.
print(second_count){18: 'восемнадцать', 19: 'девятнадцать'}
Метод popitem()
Метод popitem() не принимает никаких параметров и удаляет из словаря случайное значение. При каждом обращении, удаляет новый элемент случайным образом.
third_count = {
20: 'двадцать',
21: 'двадцать один',
22: 'двадцать два'
}print(third_count.popitem())
(22, 'двадцать два') // возвращает случайный элемент
Посмотрим, что осталось в словаре:
print(third_count){20: 'двадцать', 21: 'двадцать один'}
Метод keys()
При помощи метода keys(), можно получить все ключи из словаря.
fourth_count = {
23: 'двадцать три',
24: 'двадцать четыре',
25: 'двадцать пять'
}print(fourth_count.keys())
dict_keys([23, 24, 25]) // вывод на экран
Метод values()
При помощи метода values(), можно получить все значения ключей из словаря.
fifth_count = {
26: 'двадцать шесть',
27: 'двадцать семь',
28: 'двадцать восемь'
}print(fifth_count.values())
// Вывод всех значений
dict_values(['двадцать шесть', 'двадцать семь', 'двадцать восемь'])
Метод items()
Метод items() возвращает все элементы «ключ-значение» из словаря.
sixth_count = {
29: 'двадцать девять',
30: 'тридцать',
31: 'тридцать один'
}print(sixth_count.items()
// Вывод всех элементов
dict_items([(29, 'двадцать девять'), (30, 'тридцать'), (31, 'тридцать один')])
Сортировка словаря по ключам
Мы создали словарь age, состоящий из пар: ключ (имя) — значение (возраст). Функция sorted пройдется в цикле for и отсортирует ключи (имена) по алфавиту.
age = {
'Lorens': 29,
'Viktor': 30,
'Alex': 25
}
for i in sorted(age):
print(i,age[i])Alex - 25
Lorens - 29
Viktor - 30
Практический пример в Python
Условие задачи:У нас есть список с чередованием строк и чисел. Необходимо из списка создать словарь, где ключами будут строки, а значениями — списки из чисел.
cars_list = ['volvo', 1995, 5,'audi', 2019, 4, 'mazda', 2010]
Решение:
# Создадим пустой словарь
cars_dict = {}
# Переменная с пустым значением для обнаруженных строк
place_str = None
# Перебор элементов из списка в цикле с целью выяснить, текущий элемент строка или число. Если строка, то выполняется первый блок условия if (создание списка из чисел в качестве значений словаря), если число, то выполнится второй блок (else).
for element in cars_list:
if(type(element) == str):
cars_dict(element) = []
place_str = element
else:
cars_dist[place_str].append(element) # добавление элемента в пустой список
print(cars_dist)
# Создался словарь с парами "ключ - значение"
{'volvo': [1995, 5], 'audi': [2019, 4], 'mazda': [2010]}
- Создано 25.10.2019 10:33:33
- Михаил Русаков
Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
15 вещей, которые нужно знать о словарях Python
Словари в Python – это изменяемые отображения
ссылок на объекты, доступные
по ключу. Словари
представляют собой структуры
данных, в которых уникальные
ключи отображают значения. Ключ и значение разделяются двоеточием, пары ключ-значения отделяются запятыми, а словарь целиком ограничивается фигурными скобками {}
. Ниже
приведены три словаря, содержащие
сведения о населении пяти крупнейших городов
Германии, список покупок и оценки студентов.
>>> population = {'Berlin': 3748148, 'Hamburg': 1822445, 'Munich': 1471508, 'Cologne': 1085664, 'Frankfurt': 753056 }
>>> products = {'table': 120, 'chair': 40, 'lamp': 14, 'bed': 250, 'mattress': 100}
>>> grades = {'Alba': 9.5, 'Eduardo': 10, 'Normando': 3.5, 'Helena': 6.5, 'Claudia': 7.5}
Три этих словаря будут использоваться далее в руководстве. Чтобы лучше разобраться в теме словарей, советуем проходить этот текст вместе с интерпретатором Python.
Кроме прямого описания, словари также можно создавать с помощью
встроенной функции dict()
. Эта функция
принимает любое
количество именованных
аргументов.
>>> students_ages = dict(Amanda=27, Teresa=38, Paula=17, Mario=40)
>>> print(students_ages)
{'Amanda': 27, 'Teresa': 38, 'Paula': 17, 'Mario': 40}
Методы можно комбинировать:
>>> students_ages = dict({'Amanda': 27, 'Teresa': 38}, Paula=17, Mario=40)
>>> print(students_ages)
{'Amanda': 27, 'Teresa': 38, 'Paula': 17, 'Mario': 40}
Другой вариант – использовать список кортежей. Каждый кортеж должен содержать два объекта: ключ и значение.
>>> students_ages = dict([('Amanda', 27), ('Teresa', 38), ('Paula', 17), ('Mario', 40)])
>>> print(students_ages)
{'Amanda': 27, 'Teresa': 38, 'Paula': 17, 'Mario': 40}
Наконец, можно создать словарь,
используя два списка. Вначале строим итератор кортежей с
помощью функции zip()
. Затем используем ту же функцию dict()
для построения
словаря.
>>> students = ['Amanda', 'Teresa', 'Paula', 'Mario']
>>> ages = [27, 38, 17, 40]
>>> students_ages = dict(zip(students, ages))
>>> print(students_ages)
{'Amanda': 27, 'Teresa': 38, 'Paula': 17, 'Mario': 40}
Для доступа к значениям
словаря мы
не можем использовать числовой индекс
(как в случае со списками или кортежами). Однако схема извлечения значения похожа на индексацию: вместо числа в квадратные скобки подставляется ключ. При попытке получить доступ к значению с
помощью несуществующего ключа будет вызвана ошибка KeyError
.
Чтобы избежать получения
исключения с несуществующими
ключами, можно воспользоваться методом dict.get(key[, default])
. Этот метод возвращает
значение для ключа, если ключ находится
в словаре, иначе возвращает значение
по умолчанию default
. Если значение по умолчанию
не задано, метод возвращает None
(но никогда не возвращает
исключение).
>>> print(population['Munich'])
1471508
>>> print(population[1])
Traceback (most recent call last):
File "", line 1, in
KeyError: 1
>>> print(population['Stuttgart'])
Traceback (most recent call last):
File "", line 1, in
KeyError: 'Stuttgart'
>>> print(population.get('Munich'))
1471508
>>> print(population.get('Stuttgart'))
None
>>> print(population.get('Stuttgart', 'Not found'))
Not found
Добавить одиночный элемент в словарь можно следующим образом:
>>> products['pillow'] = 10
>>> print(products)
{'table': 120, 'chair': 40, 'lamp': 14, 'bed': 250, 'mattress': 100, 'pillow': 10}
Для добавления
нескольких элементов одновременно можно применять метод dict.update([other])
. Он обновляет словарь парами
ключ-значение из other,
перезаписывая существующие ключи.
>>> products.update({'shelf': 70, 'sofa': 300})
>>> print(products)
{'table': 120, 'chair': 40, 'lamp': 14, 'bed': 250, 'mattress': 100, 'pillow': 10, 'shelf': 70, 'sofa': 300}
>>> grades.update(Violeta=5.5, Marco=6.5, Paola=8)
>>> print(grades)
{'Alba': 9.5, 'Eduardo': 10, 'Normando': 3.5, 'Helena': 6.5, 'Claudia': 7.5, 'Violeta': 5.5, 'Marco': 6.5, 'Paola': 8}
>>> population.update([('Stuttgart', 632743), ('Dusseldorf', 617280)])
>>> print(population)
{'Berlin': 3748148, 'Hamburg': 1822445, 'Munich': 1471508, 'Cologne': 1085664, 'Frankfurt': 753056, 'Stuttgart': 632743, 'Dusseldorf': 617280}
Как показано выше, метод update()
может принимать в качестве аргумента
не только словарь, но и список
кортежей или именованные
аргументы.
Изменим значение
элемента, обратившись к ключу с помощью
квадратных скобок ([]). Для изменения
нескольких значений сразу есть метод .update()
. Он перезаписывает существующие
ключи.
Увеличим цену дивана на 100 единиц и изменим оценки двух студентов.
>>> print(products)
{'table': 120, 'chair': 40, 'lamp': 14, 'bed': 250, 'mattress': 100, 'pillow': 10, 'shelf': 70, 'sofa': 300}
>>> products['sofa'] = 400
>>> print(products)
{'table': 120, 'chair': 40, 'lamp': 14, 'bed': 250, 'mattress': 100, 'pillow': 10, 'shelf': 70, 'sofa': 400}
>>> print(grades)
{'Alba': 9.5, 'Eduardo': 10, 'Normando': 3.5, 'Helena': 6.5, 'Claudia': 7.5, 'Violeta': 5.5, 'Marco': 6.5, 'Paola': 8}
>>> grades.update({'Normando': 2.5, 'Violeta': 6})
>>> print(grades)
{'Alba': 9.5, 'Eduardo': 10, 'Normando': 2.5, 'Helena': 6.5, 'Claudia': 7.5, 'Violeta': 6, 'Marco': 6.5, 'Paola': 8}
Для удаления элемента из
словаря можно использовать либо del
dict[key]
, либо dict.pop(key[, default])
. В первом случае из словаря удаляется соответствующая пара. Или, если такого ключа нет, возвращается KeyError
.
>>> print(population)
{'Berlin': 3748148, 'Hamburg': 1822445, 'Munich': 1471508, 'Cologne': 1085664, 'Frankfurt': 753056, 'Stuttgart': 632743, 'Dusseldorf': 617280}
>>> del population['Ingolstadt']
Traceback (most recent call last):
File "", line 1, in
KeyError: 'Ingolstadt'
>>> del population['Dusseldorf']
>>> print(population)
{'Berlin': 3748148, 'Hamburg': 1822445, 'Munich': 1471508, 'Cologne': 1085664, 'Frankfurt': 753056, 'Stuttgart': 632743}
Метод dict.pop(key[,
default])
удаляет из словаря
элемент с заданным ключом и возвращает
его значение. Если ключ
отсутствует, метод возвращает
значение default
. Если значение default
не задано и ключа не существует, метод pop()
вызовет исключение KeyError
.
>>> print(population)
{'Berlin': 3748148, 'Hamburg': 1822445, 'Munich': 1471508, 'Cologne': 1085664, 'Frankfurt': 753056, 'Stuttgart': 632743}
>>> population.pop('Stuttgart')
632743
>>> print(population)
{'Berlin': 3748148, 'Hamburg': 1822445, 'Munich': 1471508, 'Cologne': 1085664, 'Frankfurt': 753056}
>>> print(population.pop('Ingolstadt', 'Value not found'))
Value not found
>>> population.pop('Garching')
Traceback (most recent call last):
File "", line 1, in
KeyError: 'Garching'
Чтобы проверить, существует ли ключ в словаре, достаточно воспользоваться операторами принадлежности:
>>> print(population)
{'Berlin': 3748148, 'Hamburg': 1822445, 'Munich': 1471508, 'Cologne': 1085664, 'Frankfurt': 753056}
>>> print('Ingolstadt' in population)
False
>>> print('Munich' in population)
True
>>> print('Ingolstadt' not in population)
True
>>> print('Munich' not in population)
False
Чтобы скопировать словарь, можно использовать метод словаря copy()
. Этот метод возвращает
поверхностную
копию словаря. Мы должны
быть осторожны с такими
копиями: если словарь содержит списки, кортежи
или множества,
то в созданной
копии будут только ссылки на объекты
из оригинала.
>>> students = {'Marco': 173, 'Luis': 184, 'Andrea': 168}
>>> students_2 = students.copy() # поверхностная копия
>>> students_2['Luis'] = 180
>>> print(students)
{'Marco': 173, 'Luis': 184, 'Andrea': 168}
>>> print(students_2)
{'Marco': 173, 'Luis': 180, 'Andrea': 168}
>>> students_weights = {'Marco': [173, 70], 'Luis': [184, 80], 'Andrea': [168, 57]}
>>> students_weights_2 = students_weights.copy()
>>> students_weights_2['Luis'][0] = 180
>>> print(students_weights)
{'Marco': [173, 70], 'Luis': [180, 80], 'Andrea': [168, 57]}
Изменение в списке students_2
затронуло список students
, так как список, содержащий вес и рост, содержит ссылки, а не дубликаты. Чтобы избежать этой проблемы,
создадим
глубокую копию, используя функцию copy.deepcopy(x)
:
>>> import copy
>>> students_weights = {'Marco': [173, 70], 'Luis': [184, 80], 'Andrea': [168, 57]}
>>> students_weights_2 = copy.deepcopy(students_weights)
>>> students_weights_2['Luis'][0] = 180
>>> print(students_weights)
{'Marco': [173, 70], 'Luis': [184, 80], 'Andrea': [168, 57]}
>>> print(students_weights_2)
{'Marco': [173, 70], 'Luis': [180, 80], 'Andrea': [168, 57]}
При использовании глубокого копирования создается полностью независимая копия.
Важно помнить, что оператор =
не
создаёт копию словаря. Он
присваивает другое имя,
но относящееся
к тому же словарю, т. е.
любое
изменение нового словаря
отражается на
исходном.
>>> fruits = {'Orange': 50, 'Apple': 65, 'Avocado': 160, 'Pear': 75}
>>> fruits_2 = fruits
>>> fruits_2.pop('Orange')
50
>>> print(fruits)
{'Apple': 65, 'Avocado': 160, 'Pear': 75}
Чтобы выяснить сколько пар
ключ-значение содержится в словаре, достаточно воспользоваться функцией len()
:
>>> print(population)
{'Berlin': 3748148, 'Hamburg': 1822445, 'Munich': 1471508, 'Cologne': 1085664, 'Frankfurt': 753056}
>>> print(len(population))
5
10.1 Итерация ключей
Чтобы перебрать все ключи, достаточно провести итерацию по элементам объекта словаря:
>>> for city in population:
... print(city)
...
Berlin
Hamburg
Munich
Cologne
Frankfurt
10.2 Итерация значений
Вычислим
сколько людей проживает в пяти крупнейших
городах Германии. Применим метод dict.values()
, возвращающий список значений словаря:
>>> print(population)
{'Berlin': 3748148, 'Hamburg': 1822445, 'Munich': 1471508, 'Cologne': 1085664, 'Frankfurt': 753056}
>>> inhabitants = 0
>>> for number in population.values():
... inhabitants += number
...
>>> print(inhabitants)
8880821
В пяти крупнейших городах Германии живут почти 9 миллионов человек.
10.3 Итерация ключей и значений
В
случае, если нужно работать
с ключами и значениями одновременно, обратимся к методу dict.items()
,
возвращающему пары ключ-значение в
виде списка кортежей.
>>> min_grade = 10
>>> min_student = ''
>>> for student, grade in grades.items():
... if grade < min_grade:
... min_student = student
... min_grade = grade
...
>>> print(min_student)
Normando
Цикл for
удобен,
но
сейчас попробуем более эффективный и
быстрый способ – генератор словарей.
Синтаксис выглядит так: {key:
value for vars in iterable}
Отфильтруем товары из словаря products
по цене ниже 100 евро, используя
как цикл for
,
так и генератор словарей.
>>> print(products)
{'table': 120, 'chair': 40, 'lamp': 14, 'bed': 250, 'mattress': 100, 'pillow': 10, 'shelf': 70, 'sofa': 400}
>>> products_low = {}
>>> for product, value in products.items():
... if value < 100:
... products_low.update({product: value})
...
>>> print(products_low)
{'chair': 40, 'lamp': 14, 'pillow': 10, 'shelf': 70}
>>> products_low = {product: value for product, value in products.items() if value < 100}
>>> print(products_low)
{'chair': 40, 'lamp': 14, 'pillow': 10, 'shelf': 70}
Результаты идентичны, при этом генератор словарей записан компактнее.
Вложенные словари – это словари, содержащие другие словари. Мы можем создать вложенный словарь так же, как мы создаем обычный словарь, используя фигурные скобки.
Следующий вложенный словарь содержит информацию о пяти известных произведениях искусства. Как можно заметить, значениями словаря являются другие словари.
# вложенный словарь, содержащий информацию об известных произведениях искусства
works_of_art = {'The_Starry_Night': {'author': 'Van Gogh', 'year': 1889, 'style': 'post-impressionist'},
'The_Birth_of_Venus': {'author': 'Sandro Botticelli', 'year': 1480, 'style': 'renaissance'},
'Guernica': {'author': 'Pablo Picasso', 'year': 1937, 'style': 'cubist'},
'American_Gothic': {'author': 'Grant Wood', 'year': 1930, 'style': 'regionalism'},
'The_Kiss': {'author': 'Gustav Klimt', 'year': 1908, 'style': 'art nouveau'}}
Создадим вложенный словарь,
используя dict()
, передавая пары
ключ-значение
в
качестве именованных
аргументов.
# вложенный словарь, созданный при помощи dict()
works_of_art = dict(The_Starry_Night={'author': 'Van Gogh', 'year': 1889, 'style': 'post-impressionist'},
The_Birth_of_Venus={'author': 'Sandro Botticelli', 'year': 1480, 'style': 'renaissance'},
Guernica={'author': 'Pablo Picasso', 'year': 1937, 'style': 'cubist'},
American_Gothic={'author': 'Grant Wood', 'year': 1930, 'style': 'regionalism'},
The_Kiss={'author': 'Gustav Klimt', 'year': 1908, 'style': 'art nouveau'})
Для
доступа к элементам во вложенном словаре указываем ключи, используя несколько
квадратных скобок ([ ][ ]
).
>>> print(works_of_art['Guernica']['author'])
Pablo Picasso
>>> print(works_of_art['American_Gothic']['style'])
regionalism
Модуль collections
предоставляет альтернативные типы
данных: OrderedDict
, defaultdict
и Counter
, расширяющие возможности обычных словарей. У нас есть подробная статья о модуле collections, которая помогает не изобретать уже известные структуры данных Python. Здесь мы остановимся на трех типах данных, наиболее близких к словарям.
13.1. OrderedDict
OrderedDict
содержит
словарь, хранящий порядок добавления
ключей. В
Python 3.6+ словари запоминают порядок,
а
для предыдущих
версий Python можно использовать OrderedDict
.
>>> import collections
>>> dictionary = collections.OrderedDict({'hydrogen': 1, 'helium': 2, 'carbon': 6, 'oxygen': 8})
>>> print(type(dictionary))
С OrderedDict
можно
использовать
операции
с элементами, методы и
функции, как при
работе с
обычным словарем.
13.2. defaultdict
defaultdict
– подкласс
словаря, присваивающий
значение
по умолчанию при отсутствии ключа. Он
никогда не выдаст KeyError
,
если
мы попробуем
получить
доступ к элементу, который отсутствует
в словаре. Будет
создана новая запись. В приведенном ниже примере
ключи создаются с
различными значениями в зависимости
от функции, используемой в качестве
первого аргумента.
>>> default_1 = collections.defaultdict(int)
>>> default_1['missing_entry']
0
>>> print(default_1)
defaultdict(, {'missing_entry': 0})
>>> default_2 = collections.defaultdict(list, {'a': 1, 'b': 2})
>>> default_2['missing_entry']
[]
>>> print(default_2)
defaultdict(, {'a': 1, 'b': 2, 'missing_entry': []})
>>> default_3 = collections.defaultdict(lambda : 'Not given', a=1, b=2)
>>> default_3['missing_entry']
'Not given'
>>> print(default_3)
defaultdict( at 0x7f75d97d6840>, {'a': 1, 'b': 2, 'missing_entry': 'Not given'})
>>> import numpy as np
>>> default_4 = collections.defaultdict(lambda: np.zeros(2))
>>> default_4['missing_entry']
array = ([0., 0.])
>>> print(default_4)
defaultdict( at 0x7f75bf7198c8>, {'missing_entry': array([0., 0.])})
13.3. Counter
Counter
– подкласс
словаря, подсчитывающий
объекты хеш-таблицы.
Функция возвращает объект Counter
,
в
котором элементы хранятся как ключи, а
их количество в виде значений. Эта функция позволяет подсчитать элементы
списка:
>>> letters = ['a', 'a', 'c', 'a', 'a', 'b', 'c', 'a']
>>> counter = collections.Counter(letters)
>>> print(counter)
Counter({'a': 5, 'c': 2, 'b': 1})
>>> print(counter.most_common(2))
[('a', 5), ('c', 2)]
Как
показано выше, мы можем легко получить
наиболее часто используемые элементы
с помощью метода most_common([n])
. Этот метод
возвращает список n
наиболее часто
встречающихся элементов и их количество.
Pandas DataFrame – это двумерная таблица со строками и столбцами, создаваемая в библиотеке анализа данных pandas. Это очень мощная библиотека для работы с данными. Ранее мы рассказывали как можно анализируовать данные с помощью одной строки на Python в pandas (да и вообще о разных трюках работы с библиотекой).
Объект DataFrame
создается
с помощью функции pandas.DataFrame()
,
принимающей различные типы данных
(списки, словари, массивы numpy).
В этой статье разберем
только те способы создания датафрейма, которые
предполагают использование словарей.
14.1. Создание DataFrame из словаря
Создадим DataFrame из словаря, где ключами будут имена столбцов, а значениями – данные столбцов:
import pandas as pd
# создать Pandas DataFrame из словаря - ключ (название столбца) - значение (информация в столбце)
df = pd.DataFrame({'name': ['Mario', 'Violeta', 'Paula'],
'age': [22, 27, 19],
'grades': [9, 8.5, 7]})
print(df)
По умолчанию индексом является номер строки (целое число, начинающееся с 0). Изменим индексы, передав список индексов в DataFrame.
# создать Pandas DataFrame из словаря - ключ (название столбца) - значение (информация в столбце) - с собственными индексами
import pandas as pd
df_index = pd.DataFrame({'name': ['Mario', 'Violeta', 'Paula'],
'age': [22, 27, 19],
'grades': [9, 8.5, 7]}, index=['student_1', 'student_2', 'student_3'])
print(df_index)
14.2. Создание DataFrame из списка словарей
Список словарей также может быть использован для создания DataFrame, где ключи – имена столбцов. Как и раньше, мы можем изменять индексы, передавая список индексов в функцию DataFrame.
# создать Pandas DataFrame из списка словарей - ключи (названия столбцов) с собственными индексами
import pandas as pd
df_2 = pd.DataFrame([{'name': 'Mario', 'age': 22, 'grades':9},
{'name': 'Violeta', 'age': 27, 'grades':8.5},
{'name': 'Paula', 'age': 19, 'grades':7}], index=['student_1', 'student_2', 'student_3'])
print(df_2)
В Pandas есть несколько функций, использующих
словари в качестве входных значений,
например, pandas.DataFrame.rename
и pandas.DataFrame.replace
.
15.1. pandas.DataFrame.rename
Эта функция возвращает DataFrame с переименованными метками осей. На вход можно подать словарь, в котором ключи – старые имена, а значения – новые. Метки, не содержащиеся в словаре, остаются неизменными.
# изменить метки индекса в df_2
import pandas as pd
df_2 = pd.DataFrame([{'name': 'Mario', 'age': 22, 'grades':9},
{'name': 'Violeta', 'age': 27, 'grades':8.5},
{'name': 'Paula', 'age': 19, 'grades':7}], index=['student_1', 'student_2', 'student_3'])
df_2.rename(index={'student_1': 'new_label_1', 'student_2': 'new_label_2'}, inplace=True)
print(df_2)
15.2. pandas.DataFrame.replace
Эта функция меняет значения DataFrame на другие значения. Мы можем использовать словарь с функцией замены для изменения DataFrame, где ключи представляют собой существующие записи, а значения – новые.
# заменить Mario --> Maria и Paula --> Paola
import pandas as pd
df_2 = pd.DataFrame([{'name': 'Mario', 'age': 22, 'grades':9},
{'name': 'Violeta', 'age': 27, 'grades':8.5},
{'name': 'Paula', 'age': 19, 'grades':7}], index=['student_1', 'student_2', 'student_3'])
df_2.replace({'Mario': 'Maria', 'Paula': 'Paola'}, inplace=True)
print(df_2)
***
Итак, мы рассмотрели разные способы создания словаря, базовые операции (добавление, изменение, удаление элементов). Также мы узнали когда стоит использовать глубокую копию словаря вместо поверхностной. Научились строить матрёшки – вложенные словари. Такие конструкции встретятся, когда вы будете качать, например, с ВКонтакте через его API разнообразную информацию.
Если вы любите Python, Библиотека программиста подготовила ещё много интересных материалов об этом замечательном языке:
Свежие материалы доступны по тегу Python.
Python 3: методы словарей — len, clear, get, setdefault, pop
На этом занятии мы продолжаем знакомиться со словарями в Python и рассмотрим основные их методы. Итак, для удаления всех записей из словаря используется метод
Для создания копии словаря используется метод copy:
d = {True: 1, False: "Ложь", "list": [1,2,3], 5: 5} d2 = d.copy() d2["list"] = [5,6,7] print(d) print(d2)
Следующий метод get позволяет получать значение словаря по ключу:
Его отличие от оператора
в том, что при указании неверного ключа не возникает ошибки, а выдается по умолчанию значение None:
Это значение можно изменить, указав его вторым аргументом:
Похожий метод
dict.setdefault(key[, default])
возвращает значение, ассоциированное с ключом key и если его нет, то добавляет в словарь со значением None, либо default – если оно указано:
d.setdefault("list") d.setdefault(3)
Добавит ключ 3 со значением None. Удалим его:
del d[3] d.setdefault(3, "three")
тогда добавится этот ключ со значением «three». То есть, этот метод способен создать новую запись, но только в том случае, если указанный ключ изначально отсутствовал в словаре.
Следующий метод
удаляет указанный ключ и возвращает его значение. Если в нем указывается несуществующий ключ, то возникает ошибка:
Но мы можем легко исправить ситуацию, если в качестве второго аргумента указать значение, возвращаемое при отсутствии ключа:
Здесь возвратится False. Если же ключ присутствует, то возвращается его значение.
Следующий метод
выполняет удаление произвольной записи из словаря. Если словарь пуст, то возникает ошибка:
Далее, метод
возвращает коллекцию ключей. По умолчанию цикл for обходит именно эту коллекцию, при указании словаря:
d = {True: 1, False: "Ложь", "list": [1,2,3], 5: 5} for x in d: print(x)
то есть, эта запись эквивалента такой:
Если же вместо keys записать метод values:
то обход будет происходить по значениям, то есть, метод values возвращает коллекцию из значений словаря.
Последний подобный метод items
возвращает записи в виде кортежей: ключ, значение. О кортежах мы будем говорить позже, здесь лишь отмечу, что к элементу кортежа можно обратиться по индексу и вывести отдельно ключи и значения:
Или, используя синтаксис множественного наследования:
можно записать цикл for в таком виде:
for key, value in d.items(): print(key, value)
что гораздо удобнее и нагляднее.
Задания для самоподготовки
1. Пользователь вводит произвольные целые числа и нужно создать словарь, у которого ключами будут только четные числа, а значениями – квадраты этих чисел.
2. Пусть имеется вот такая строка:
«int= целое число, dict=словарь, list=список, str=строка, bool=булевый тип»
Требуется из нее создать словарь с ключами:
int, dict, list, str, bool
и соответствующими значениями.
3. Пользователь вводит с клавиатуры M раз данные в формате:
английское слово: перевод1, перевод2, …, переводN
каждую введенную строку необходимо преобразовать и поместить в словарь, у которого ключом будет английское слово, а значением список:
[перевод1, перевод2, …, переводN]
Python Словари
Словарь
Словарь — это неупорядоченная, изменяемая и индексируемая коллекция. В Python словари написаны фигурными скобками, и у них есть ключи и ценности.
Пример
Создайте и распечатайте словарь:
thisdict = {
«Бренд»: «Форд»,
«модель»: «Мустанг»,
«год»: 1964
}
печать (thisdict)
Доступ к пунктам
Вы можете получить доступ к элементам словаря, ссылаясь на его ключевое имя, внутри квадратные скобки:
Существует также метод с именем get ()
, который даст вам тот же результат:
Изменить значения
Вы можете изменить значение определенного элемента, ссылаясь на его имя ключа:
Пример
Измените «год» на 2018:
thisdict = {
«Бренд»: «Форд»,
«модель»: «Мустанг»,
«год»: 1964
}
thisdict [«year»] = 2018
Цикл по словарю
Вы можете перебрать словарь, используя за
петли.
При циклическом просмотре словаря возвращаемое значение — это ключей из словарь, но есть методы для возврата значений , а также .
Пример
Распечатайте все ключевые слова в словаре, один за другим:
для х в этом суждении:
печать (х)
Пример
Вывести все значения в словаре по одному:
для х в этом приговоре:
отпечатков (thisdict [x])
Пример
Вы также можете использовать метод values ()
для
возвращаемые значения словаря:
для х в этом приговоре.значения ():
, печать (х),
Пример
Выполните циклическое переключение между клавишами и значениями , используя предметов ()
метод:
для x, y в thisdict.items ():
print (x, y)
Проверьте, существует ли ключ
Чтобы определить, присутствует ли указанный ключ в словаре, используйте ключевое слово в
:
Пример
Проверьте, присутствует ли «модель» в словаре:
thisdict = {
«Бренд»: «Форд»,
«модель»: «Мустанг»,
«год»: 1964
}
если «модель» в этом решении:
распечатать («Да,« модель »
один из ключей в словаре thisdict «)
Длина словаря
Чтобы определить, сколько элементов (пар ключ-значение) имеет словарь, используйте len ()
функция.
Пример
Выведите количество предметов в словаре:
print (len (thisdict))
Попробуй сам »Добавление предметов
Добавление элемента в словарь выполняется с помощью нового индексного ключа и присвоения ему значения:
Пример
thisdict = {
«Бренд»: «Форд»,
«модель»: «Мустанг»,
«год»: 1964
}
thisdict [«color»] = «красный»
print (thisdict)
Извлечение предметов
Существует несколько способов удаления элементов из словаря:
Пример
Метод pop ()
удаляет элемент с указанным именем ключа:
thisdict = {
«Бренд»: «Форд»,
«модель»: «Мустанг»,
«год»: 1964
}
thisdict.поп («модель»)
печать (thisdict)
Пример
Метод popitem () (метод
) удаляет последний
вставленный элемент (в версиях до 3.7 вместо него удаляется случайный элемент):
thisdict = {
«Бренд»: «Форд»,
«модель»: «Мустанг»,
«год»: 1964
}
thisdict.popitem ()
печать (thisdict)
Пример
Ключевое слово del
удаляет элемент с указанным
Ключевое имя:
thisdict = {
«Бренд»: «Форд»,
«модель»: «Мустанг»,
«год»: 1964
}
del thisdict [«модель»]
print (thisdict)
Пример
Ключевое слово del
также может удалить
словарь полностью:
thisdict = {
«Бренд»: «Форд»,
«модель»: «Мустанг»,
«год»: 1964
}
del thisdict
print (thisdict) # это приведет к ошибке, потому что «thisdict»
больше не существует.
Пример
Метод clear ()
очищает
словарь:
thisdict = {
«Бренд»: «Форд»,
«модель»: «Мустанг»,
«год»: 1964
}
thisdict.clear ()
print (thisdict)
Скопируйте словарь
Вы не можете скопировать словарь, просто набрав dict2 =
dict1
, потому что: dict2
будет только ссылки от до dict1
и изменения, внесенные в dict1
также будет автоматически сделан в dict2
.
Есть способы сделать копию, одним из способов является использование встроенного словаря
метод копия ()
.
Пример
Сделайте копию словаря с помощью метода copy ()
:
thisdict = {
«Бренд»: «Форд»,
«модель»: «Мустанг»,
«год»: 1964
}
mydict
= thisdict.copy ()
печать (mydict)
Еще один способ сделать копию — использовать встроенную функцию dict ()
.
Пример
Сделайте копию словаря с dict ()
функция:
thisdict = {
«Бренд»: «Форд»,
«модель»: «Мустанг»,
«год»: 1964
}
mydict
= dict (thisdict)
печать (mydict)
Вложенные словари
Словарь также может содержать много словарей, это называется вложенным словари.
Пример
Создайте словарь, содержащий три словаря:
myfamily = {
«child1»: {
«name»: «Emil»,
«год»: 2004
},
«child2»: {
«имя»: «Тобиас»,
«год»: 2007,
},
«child3»: {
«name»: «Linus»,
«год»: 2011
}
}
Или, если вы хотите вложить три словаря, которые уже существуют как словари:
Пример
Создайте три словаря, затем создайте один словарь, который будет содержать остальные три словаря:
child1 = {«name»: «Emil»,
«year»: 2004
}
child2 = {
«name»: «Tobias»,
«year»: 2007
}
child3 = {
«name»: «Linus»,
«год»: 2011
}
myfamily = {
«child1»: child1,
«child2»: child2,
«child3»: child3
}
Конструктор dict ()
Также возможно использовать конструктор dict () для создания новый словарь:
Пример
thisdict = dict (бренд = «Ford», модель = «Mustang», год = 1964)
# обратите внимание, что ключевые слова не являются строковыми литералами
# обратите внимание на использование равных, а не двоеточия для назначения
печать (thisdict)
Методы словаря
Python имеет набор встроенных методов, которые вы можете использовать в словарях.
Метод | Описание |
---|---|
clear () | Удаляет все элементы из словаря |
copy () | Возвращает копию словаря |
fromkeys () | Возвращает словарь с указанными ключами и значением |
get () | Возвращает значение указанного ключа |
items () | Возвращает список, содержащий кортеж для каждой пары ключ-значение |
keys () | Возвращает список, содержащий ключи словаря |
pop () | Удаляет элемент с указанным ключом |
popitem () | Удаляет последний вставленная пара ключ-значение |
setdefault () | Возвращает значение указанного ключа.Если ключ не существует: введите ключ с указанным значением |
update () | Обновляет словарь с указанными парами ключ-значение |
values () | Возвращает список всех значений в словаре |
,
словарь Python (с примерами)
Python словарь представляет собой неупорядоченную коллекцию предметов. Каждый элемент словаря имеет пара ключ / значение
.
Словари оптимизированы для получения значений, когда ключ известен.
Создание словаря Python
Создать словарь так же просто, как поместить элементы в фигурные скобки {}
, разделенные запятыми.
Элемент имеет ключ
и соответствующее значение
, которое выражается в виде пары (ключ : значение ).
Хотя значения могут быть любого типа данных и могут повторяться, ключи должны быть неизменного типа (строка, число или кортеж с неизменяемыми элементами) и должны быть уникальными.
# пустой словарь
my_dict = {}
# словарь с целочисленными клавишами
my_dict = {1: 'apple', 2: 'ball'}
# словарь со смешанными ключами
my_dict = {'name': 'John', 1: [2, 4, 3]}
# используя dict ()
my_dict = dict ({1: «яблоко», 2: «мяч»})
# из последовательности, имеющей каждый элемент в паре
my_dict = dict ([(1, 'apple'), (2, 'ball')])
Как вы можете видеть выше, мы также можем создать словарь, используя встроенную функцию dict ()
.
Доступ к элементам из словаря
Хотя для доступа к значениям используется индексирование с другими типами данных, в словаре используются ключи
. Ключи можно использовать либо внутри квадратных скобок []
, либо с помощью метода get ()
.
Если мы используем квадратные скобки []
, KeyError
повышается, если ключ не найден в словаре. С другой стороны, метод get ()
возвращает Нет
, если ключ не найден.
# get vs [] для получения элементов
my_dict = {'name': 'Jack', 'age': 26}
# Вывод: Джек
печать (my_dict [ 'имя'])
# Выход: 26
печать (my_dict.get ( 'возраст'))
# Попытка получить доступ к ключам, которые не существуют, выдает ошибку
# Выход Нет
печать (my_dict.get ( 'адрес'))
# KeyError
печать (my_dict ['address'])
Выход
Джек 26 Никто Traceback (последний вызов был последним): Файл "<строка>", строка 15, в <модуле> печать (my_dict [ 'адрес']) KeyError: 'address'
Изменение и добавление словарных элементов
Словари являются изменчивыми.Мы можем добавлять новые элементы или изменять стоимость существующих элементов, используя оператор присваивания.
Если ключ уже присутствует, существующее значение обновляется. Если ключ отсутствует, в словарь добавляется новая пара ( ключ: значение ).
# Изменение и добавление элементов словаря
my_dict = {'name': 'Jack', 'age': 26}
# обновить значение
my_dict ['age'] = 27
# Выход: {'age': 27, 'name': 'Jack'}
печать (my_dict)
# Добавьте предмет
my_dict ['address'] = 'Центр города'
# Вывод: {'address': 'Downtown', 'age': 27, 'name': 'Jack'}
печать (my_dict)
Выход
{'name': 'Jack', 'age': 27} {'name': 'Jack', 'age': 27, 'address': 'Downtown'}
Удаление элементов из словаря
Мы можем удалить определенный элемент в словаре, используя метод pop ()
.Этот метод удаляет элемент с предоставленным ключом
и возвращает значение
.
Метод popitem ()
можно использовать для удаления и возврата произвольной пары (ключ, значение)
элементов из словаря. Все элементы можно удалить сразу, используя метод clear ()
.
Мы также можем использовать ключевое слово del
, чтобы удалить отдельные элементы или весь словарь.
# Удаление элементов из словаря
# создать словарь
квадраты = {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
# удалить определенный элемент, возвращает его значение
# Выход: 16
печать (квадраты.поп (4))
# Вывод: {1: 1, 2: 4, 3: 9, 5: 25}
печать (квадраты)
# удалить произвольный элемент, вернуть (ключ, значение)
# Вывод: (5, 25)
печать (squares.popitem ())
# Вывод: {1: 1, 2: 4, 3: 9}
печать (квадраты)
# удалить все элементы
squares.clear ()
# Вывод: {}
печать (квадраты)
# удалить сам словарь
Del Squares
# Выдает ошибку
печать (квадраты)
Выход
16 {1: 1, 2: 4, 3: 9, 5: 25} (5, 25) {1: 1, 2: 4, 3: 9} {} Traceback (последний вызов был последним): Файл "<строка>", строка 30, в <модуле> печать (квадраты) NameError: имя 'квадраты' не определено
Python Словарь Методы
Методы, доступные со словарем, приведены в таблице ниже.Некоторые из них уже были использованы в приведенных выше примерах.
Метод | Описание |
---|---|
clear () | Удаляет все элементы из словаря. |
() | Возвращает поверхностную копию словаря. |
fromkeys (seq [, v]) | Возвращает новый словарь с ключами от seq и значением, равным v (по умолчанию Нет ). |
получить (ключ [, d]) | Возвращает значение ключа . Если ключ не существует, возвращает d (по умолчанию Нет ). |
штук () | Возвращает новый объект элементов словаря в формате (ключ, значение). |
ключей () | Возвращает новый объект ключей словаря. |
pop (клавиша [, d]) | Удаляет элемент с помощью ключа и возвращает его значение или d , если ключ не найден.Если d не предоставлено и ключ не найден, он вызывает KeyError . |
popitem () | Удаляет и возвращает произвольный элемент (ключ , значение ). Вызывает KeyError , если словарь пуст. |
setdefault (ключ [, d]) | Возвращает соответствующее значение, если ключ находится в словаре. Если нет, вставьте ключ со значением d и вернет d (по умолчанию Нет ). |
обновление ([другое]) | Обновляет словарь парами ключ / значение из , другие , перезаписывая существующие ключи. |
значений () | Возвращает новый объект значений словаря |
Вот несколько примеров использования этих методов.
# Методы словаря
marks = {} .fromkeys (['Math', 'English', 'Science'], 0)
# Вывод: {'Английский': 0, 'Математика': 0, 'Наука': 0}
печать (метки)
за товар в марках.Предметы():
печать (пункт)
# Вывод: ['English', 'Math', 'Science']
печать (список (отсортировано (marks.keys ())))
Выход
{'Math': 0, 'English': 0, 'Science': 0} («Математика», 0) («Английский», 0) («Наука», 0) ['Английский', 'Математика', 'Наука']
Python Словарь Понимание
Понимание словаря — это элегантный и лаконичный способ создания нового словаря из повторяемого в Python.
Понимание словаря состоит из пары выражений (ключ : значение ), за которой следует оператор для
внутри фигурных скобок {}
.
Вот пример создания словаря, в котором каждый элемент является парой числа и его квадрата.
# Словарь Понимание
квадраты = {x: x * x для x в диапазоне (6)}
печать (квадраты)
Выход
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
Этот код эквивалентен
квадрата = {}
для х в диапазоне (6):
квадраты [х] = х * х
печать (квадраты)
Выход
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
Словарь может дополнительно содержать операторы for или if.
Необязательный оператор , если
может отфильтровывать элементы для формирования нового словаря.
Вот несколько примеров, как сделать словарь только с нечетными элементами.
# Словарь понимания с условным условием
odd_squares = {x: x * x для x в диапазоне (11), если x% 2 == 1}
печать (odd_squares)
Выход
{1: 1, 3: 9, 5: 25, 7: 49, 9: 81}
Чтобы узнать больше о словарях, посетите словарь Python.
Прочие операции со словарем
словарь тест на членство
Мы можем проверить, находится ли ключ
в словаре или не используется ключевое слово в
. Обратите внимание, что тест на членство предназначен только для ключей
, а не для значений
.
# Членский тест для ключей словаря
квадраты = {1: 1, 3: 9, 5: 25, 7: 49, 9: 81}
# Вывод: True
печать (1 в квадратах)
# Вывод: True
печать (2 не в квадратах)
# тесты на членство только для ключа не значение
# Вывод: Ложь
печать (49 квадратов)
Выход
True Правда Ложь
Перебор словаря
Мы можем перебирать каждый ключ в словаре, используя цикл для
.
# Перебор словаря
квадраты = {1: 1, 3: 9, 5: 25, 7: 49, 9: 81}
я в квадратах:
печать (квадраты [i])
Выход
1 9 25 49 81
Встроенные функции словаря
Встроенные функции, такие как all ()
, any ()
, len ()
, cmp ()
, sorted ()
и т. Д. Обычно используются со словарями для выполнения различных задач.
Функция | Описание |
---|---|
все () | Возвращает Истинно , если все ключи словаря истинны (или если словарь пуст). |
любой () | Возвращает Истинно , если какой-либо ключ словаря истинен. Если словарь пуст, вернуть False . |
len () | Возвращает длину (количество элементов) в словаре. |
cmp () | Сравнивает элементы двух словарей. (Недоступно в Python 3) |
отсортировано () | Возвращает новый отсортированный список ключей в словаре. |
Вот несколько примеров, которые используют встроенные функции для работы со словарем.
# Словарь Встроенные функции
квадраты = {0: 0, 1: 1, 3: 9, 5: 25, 7: 49, 9: 81}
# Вывод: Ложь
печать (все (квадраты))
# Вывод: True
печать (любые (квадраты))
# Выход: 6
печать (LEN (квадраты))
# Вывод: [0, 1, 3, 5, 7, 9]
печать (отсортировано (квадраты))
Выход
Неверно Правда 6 [0, 1, 3, 5, 7, 9],
1. Учебник по словарю Python
За последние несколько уроков мы узнали о некоторых конструкциях Python, таких как списки и кортежи. Сегодня у нас будет слово о словаре Python, который является еще одним типом структуры данных в Python. Кроме того, мы будем изучать, как создавать, получать доступ, удалять, переназначать словарь в Python. Наряду с этим мы изучим метод и операции Python Dictionary.
Итак, давайте начнем учебник по словарю Python.
Python Dictionary
2. Введение в словари Python
Реальный словарь содержит слова и их значения. Как вы можете себе представить, словарь Python также содержит пары ключ-значение. Давайте посмотрим, как его создать.
3. Как создать словарь в Python?
Создать словарь Python просто, как пирог. Отделите ключи от значений двоеточием (:), а пару от другого запятой (,). Наконец, поместите все это в фигурные скобки.
>>> {'PB & J': «Арахисовое масло и желе», «PJ»: «Пижама»}
{«PB & J»: «Арахисовое масло и желе», «PJ»: «Пижама»}
Опционально Вы можете поместить словарь в переменную.Если вы хотите использовать его позже в программе, вы должны сделать это.
>>> lingo = {'PB & J': 'Peanut Butter and Jelly', 'PJ': 'Pyjamas'}
Чтобы создать пустой словарь, просто используйте фигурные скобки, а затем присвойте его переменной
>> > dict2 = {} >>> dict2
{}
>>> тип (dict2)
<класс ‘dict’>
a. Понимание словаря Python
Вы также можете создать диктант Python, используя понимание.Это то же самое, что вы узнали на уроке математики. Чтобы сделать это, следуйте паре выражений с циклом for-Statement в Python. Наконец, поместите все это в фигурные скобки.
>>> mydict = {x * x: x для x в диапазоне (8)} >>> mydict
{0: 0, 1: 1, 4: 2, 9: 3, 16: 4, 25: 5, 36: 6, 49: 7}
В приведенном выше коде мы создали Python словарь для хранения квадратов чисел от 0 до 7 в качестве ключей и чисел 0-1 в качестве значений.
б. Словари со смешанными ключами
Нет необходимости использовать ключи (или значения) одного и того же типа для словаря в Python.
>>> dict3 = {1: 'морковь', 'два': [1,2,3]} >>> dict3
{1: ‘морковь’, ‘два’: [1, 2, 3]}
Как вы можете видеть здесь, ключ или значение могут быть любыми, от целого числа до списка.
c. dict ()
Используя функцию dict (), вы можете преобразовать совместимую комбинацию конструкций в словарь Python.
>>> dict (([1,2], [2,4], [3,6]))
{1: 2, 2: 4, 3: 6}
Однако эта функция принимает только один аргумент.Поэтому, если вы передадите ему три списка, вы должны передать их внутри списка или кортежа. В противном случае выдает ошибку.
>>> dict ([1,2], [2,4], [3,6])
Traceback (последний последний вызов):
Файл «
dict ([1,2], [2,4], [3,6])
TypeError: ожидаемое значение dict не более 1 аргумента, получено 3
d. Объявление одного ключа более одного раза
Теперь давайте попробуем объявить один ключ более одного раза и посмотрим, что произойдет.
>>> mydict2 = {1: 2,1: 3,1: 4,2: 4} >>> mydict2
{1: 4, 2: 4}
Как видите, 1: 2 был заменен на 1: 3, который затем был заменен на 1: 4. Это показывает нам, что словарь не может содержать один и тот же ключ дважды.
эл. Объявление пустого словаря и добавление элементов позднее
Если вы не знаете, какие пары ключ-значение входят в ваш словарь Python, вы можете просто создать пустой диктант Python и добавить пары позже.
>>> animals = {} >>> тип (животные)
<класс ‘dict’>
>>> животные [1] = 'собака' >>> животные [2] = 'кошка' >>> животные [3] = 'хорька' >>> animals
{1: ‘собака’, 2: ‘кошка’, 3: ‘ferret’}
У вас есть вопрос о Python Dictionay? Оставить комментарий.
4. Как получить доступ к словарю Python?
а. Доступ ко всему словарю Python
Чтобы получить весь словарь одновременно, введите его имя в оболочке.
>>> dict3
{1: «морковь», «два»: [1, 2, 3]}
b. Доступ к значению
Чтобы получить доступ к элементу из списка или кортежа, мы используем его индекс в квадратных скобках. Это синтаксис Python для подражания. Однако словарь Python неупорядочен. Таким образом, чтобы получить значение из него, вам нужно поставить его ключ в квадратных скобках.
Чтобы получить квадратный корень из 36 из словаря выше, мы пишем следующий код.
>>> mydict [36]
6
c. get ()
Функция get () словаря Python принимает ключ в качестве аргумента и возвращает соответствующее значение.
>>> mydict.get (49)
7
d. Если ключей словаря Python не существует
Если искомого ключа не существует, давайте посмотрим, что произойдет.
>>> mydict [48]
Traceback (последний последний вызов):
Файл «
mydict [48]
KeyError: 48
Использование ключа в квадратных скобках дает нам KeyError.Теперь давайте посмотрим, что возвращает метод get () в такой ситуации.
>>> mydict.get (48) >>>
Как видите, ничего не печаталось. Давайте поместим это в заявление для печати, чтобы узнать, что происходит.
>>> print (mydict.get (48))
Нет
Итак, мы видим, что когда ключа не существует, функция get () возвращает значение None. Мы обсуждали это ранее, и знаем, что это указывает на отсутствие ценности.
5. Переназначение словаря Python
Словарь Python является изменяемым.Это означает, что мы можем изменить его или добавить новые элементы, не переназначая их все.
а. Обновление значения существующего ключа
Если ключ уже существует в словаре Python, вы можете переназначить его значение в квадратных скобках.
Давайте возьмем для этого новый словарь Python.
>>> dict4 = {1: 1,2: 2,3: 3}
Теперь давайте попробуем обновить значение для ключа 2.
>>> dict4 [2] = 4 >>> dict4
{1: 1, 2: 4, 3: 3}
b.Добавление нового ключа
Однако, если ключ еще не существует в словаре, он добавляет новый.
>>> dict4 [4] = 6 >>> dict4
{1: 1, 2: 4, 3: 3, 4: 6}
Словарь Python нельзя разрезать.
6. Как удалить словарь Python?
Вы можете удалить весь словарь. Кроме того, в отличие от кортежа, словарь Python является изменяемым. Таким образом, вы также можете удалить его часть.
а. Удаление всего словаря Python
Чтобы удалить весь словарь Python, просто используйте его имя после ключевого слова «del».
>>> del dict4 >>> dict4
Traceback (последний последний вызов):
Файл «
dict4
NameError: имя ‘dict4’ не определено
b. Удаление одной пары ключ-значение
Чтобы удалить только одну пару ключ-значение, используйте ключевое слово «del» с ключом пары для удаления.
Теперь давайте сначала переназначим dict4 для этого примера.
>>> dict4 = {1: 1,2: 2,3: 3,4: 4}
Теперь давайте удалим пару 2: 2
>>> del dict4 [2] >>> dict4
{1: 1, 3: 3, 4: 4}
Несколько других методов позволяют нам удалить элемент из словаря в Python.Мы увидим это в разделе 8.
7. Встроенные функции в словаре Python
Функция — это процедура, которую можно применить к конструкции для получения значения. Кроме того, он не изменяет конструкцию. Python дает нам несколько функций, которые мы можем применить к словарю Python. Взглянуть.
а. len ()
Функция len () возвращает длину словаря в Python. Каждая пара ключ-значение добавляет 1 к длине.
>>> len (dict4)
3
Пустой словарь Python имеет длину 0.
>>> len ({})
b. any ()
Как и в случае со списками кортежей, функция any () возвращает True, если хотя бы один ключ в словаре имеет логическое значение True.
>>> любой ({False: False, '': ''})
False
>>> любой ({True: False, "": ""})
True
>>> любой ({'1': '', '': ''})
Верно
c. all ()
В отличие от функции any (), all () возвращает True, только если все ключи в словаре имеют логическое значение True.
>>> все ({1: 2,2: '', "": 3})
Неверно
d. sorted ()
Как и в случае со списками и кортежами, функция sorted () возвращает отсортированную последовательность ключей в словаре. Сортировка выполняется в порядке возрастания и не изменяет исходный словарь Python.
Но чтобы увидеть его эффект, давайте сначала изменим dict4.
>>> dict4 = {3: 3,1: 1,4: 4}
Теперь давайте применим к нему функцию sorted ().
>>> sorted (dict4)
[1, 3, 4]
Теперь попробуем снова напечатать словарь dict4.
>>> dict4
{3: 3, 1: 1, 4: 4}
Как видите, исходный словарь Python не был изменен.
Эта функция возвращает ключи в отсортированном списке. Чтобы доказать это, давайте посмотрим, что возвращает функция type ().
>>> type (sorted (dict4))
Это доказывает, что sorted () возвращает список.
8. Встроенные методы в словаре Python
Метод — это набор инструкций, которые нужно выполнить для конструкции, и он может изменить конструкцию.Чтобы сделать это, метод должен быть вызван на конструкции. Теперь давайте посмотрим на доступные методы для словарей.
Давайте используем dict4 для этого примера.
>>> dict4
{3: 3, 1: 1, 4: 4}
a. keys ()
Метод keys () возвращает список ключей в словаре Python.
>>> dict4.keys ()
dict_keys ([3, 1, 4])
b. values ()
Аналогично, метод values () возвращает список значений в словаре.
>>> dict4.values ()
dict_values ([3, 1, 4])
c. items ()
Этот метод возвращает список пар ключ-значение.
>>> dict4.items ()
dict_items ([(3, 3), (1, 1), (4, 4)])
d. get ()
Впервые мы увидели эту функцию в разделе 4c. Теперь давайте копнем немного глубже.
Требуется от одного до двух аргументов. В то время как первый — это ключ для поиска, второй — это значение, которое нужно вернуть, если ключ не найден.Значением по умолчанию для этого второго аргумента является None.
>>> dict4.get (3,0)
3
>>> dict4.get (5,0)
Так как ключа 5 не было в словаре, он вернул 0, как мы указали.
Есть еще сомнения в словаре Python? Оставить комментарий.
эл. clear ()
Цель функции clear очевидна. Это опустошает словарь Python.
>>> dict4.clear () >>> dict4
{}
Давайте переназначим его для дальнейших примеров.
>>> dict4 = {3: 3,1: 1,4: 4}
f. copy ()
Во-первых, давайте посмотрим, что такое мелкие и глубокие копии. Мелкая копия копирует только содержимое, и новая конструкция указывает на то же место в памяти. Но глубокая копия копирует содержимое, и новая конструкция указывает на другое местоположение. Метод copy () создает поверхностную копию словаря Python.
>>> newdict = dict4.copy () >>> newdict
{3: 3, 1: 1, 4: 4}
г. pop ()
Этот метод используется для удаления и отображения элемента из словаря.Требуется от одного до двух аргументов. Первый — это ключ, который нужно удалить, а второй — это значение, которое возвращается, если ключ не найден.
>>> newdict.pop (4)
4
Теперь давайте попробуем удалить пару 4: 4.
>>> newdict.pop (5, -1)
-1
Однако, в отличие от метода get (), для второго параметра по умолчанию отсутствует значение None.
>>> newdict.pop (5)
Traceback (последний последний вызов):
Файл «
newdict.pop (5)
KeyError: 5
Как вы можете видеть, он вызвал KeyError, когда не смог найти ключ.
ч. popitem ()
Давайте сначала переназначим словарь Python newdict.
>>> newdict = {3: 3,1: 1,4: 4,7: 7,9: 9}
Теперь попробуем вызвать popitem () для этого.
>>> newdict.popitem ()
(9, 9)
Вышла пара 9: 9.
Давайте перезапустим оболочку и снова переназначим словарь и посмотрим, какая пара выброшена.
=============================== RESTART: Shell ============== ================= >>> newdict = {3: 3,1: 1,4: 4,7: 7,9: 9} >>> newdict.popitem ()
(9, 9)
Как видите, та же пара выскочила. Отсюда можно понять, что внутренняя логика метода popitem () такова, что для определенного словаря он всегда подбирает пары в одном и том же порядке.
я. fromkeys ()
Этот метод создает новый словарь Python из существующего.Чтобы взять пример, мы пытаемся создать новый словарь из newdict. В то время как первый аргумент получает набор ключей из словаря, второй принимает значение, назначаемое всем этим ключам. Но второй аргумент необязателен.
>>> newdict.fromkeys ({1,2,3,4,7}, 0)
{1: 0, 2: 0, 3: 0, 4: 0, 7: 0}
Однако, ключи не должны быть в наборе.
>>> newdict.fromkeys ((1,2,3,4,7), 0)
{1: 0, 2: 0, 3: 0, 4: 0, 7: 0}
Like we До сих пор видел значение по умолчанию для второго аргумента Нет.
>>> newdict.fromkeys ({'1', '2', '3', '4', '7'})
{‘4’: нет, ‘7’: нет, ‘3’: Нет, «1»: Нет, «2»: Нет}
j. update ()
Метод update () принимает в качестве аргумента другой словарь. Затем он обновляет словарь для хранения значений из другого словаря, которого он еще не сделал.
>>> dict1 = {1: 1,2: 2} >>> dict2 = {2: 2,3: 3} >>> dict1.update (dict2) >>> dict1
{1: 1, 2: 2, 3: 3}
9.Python Dictionary Operations
Мы узнали о различных классах операторов в Python ранее. Давайте теперь посмотрим, какие из них мы можем применить к словарям.
а. Членство
Мы можем применить операторы «in» и «not in» к словарю Python, чтобы проверить, содержит ли он определенный ключ.
Для этого примера мы будем работать с dict1.
>>> dict1
{1: 1, 2: 2, 3: 3}
>>> 2 в dict1
True
>>> 4 в dict1
False
2 является ключом в dict1, но 4 нет.Следовательно, он возвращает True и False для них, соответственно.
10. Итерационный словарь Python
В цикле for вы также можете выполнять итерацию по словарю Python, например по списку, кортежу или множеству.
>>> dict4
{1: 1, 3: 3, 4: 4}
>>> для i в dict4: print (dict4 [i] * 2)
2
6
8
Приведенный выше код для каждого ключа в словаре Python умножает его значение на 2, а затем печатает его.
11. Вложенный словарь
Наконец, давайте посмотрим на вложенные словари.Вы также можете поместить словарь Python как значение в словарь.
>>> dict1 = {4: {1: 2,2: 4}, 8: 16} >>> dict1
{4: {1: 2, 2: 4}, 8: 16}
Чтобы получить значение для ключа 4, напишите следующий код.
>>> dict1 [4]
{1: 2, 2: 4}
Однако вы не можете поместить его в качестве ключа, поскольку это приводит к ошибке.
>>> dict1 = {{1: 2,2: 4}: 8,8: 16}
Трассировка (последний последний вызов):
Файл «
dict1 = {{1: 2,2: 4}: 8,8: 16}
TypeError: unhashable type: ‘dict’
Итак, это все о учебнике по Python Dictionary.Надеюсь, вам понравится наше объяснение
12. Заключение
На сегодняшнем уроке мы подробно изучили Python Dictionary. Сначала мы увидели, как создать, получить доступ, переназначить и удалить словарь или его элементы. Затем мы рассмотрели встроенные функции и методы для словарей. После этого мы узнали об операциях, которые мы можем выполнить над ними. Наконец, мы узнали о вложенных словарях и о том, как выполнять итерацию в словаре Python. Тем не менее, у вас есть путаница? не стесняйтесь спрашивать в поле для комментариев.
Ссылка
.словарей в Python — Real Python
Смотреть сейчас В этом руководстве есть соответствующий видеокурс, созданный командой Real Python. Смотрите его вместе с письменным учебником, чтобы углубить ваше понимание: Словари в Python
Python предоставляет другой составной тип данных, называемый словарь , который похож на список тем, что представляет собой набор объектов.
Вот что вы узнаете из этого урока: Вы познакомитесь с основными характеристиками словарей Python и узнаете, как получить доступ к данным словаря и управлять ими.После того, как вы закончили это руководство, у вас должно быть четкое представление о том, когда словарь является подходящим типом данных для использования, и как это сделать.
Словари и спискиимеют следующие характеристики:
- Оба изменчивы.
- Оба динамические. Они могут расти и уменьшаться по мере необходимости.
- Оба могут быть вложенными. Список может содержать другой список. Словарь может содержать другой словарь. Словарь может также содержать список, и наоборот.
Словари отличаются от списков прежде всего тем, как осуществляется доступ к элементам:
- Доступ к элементам списка осуществляется по их позиции в списке посредством индексации.
- Словарные элементы доступны через ключи.
Пройдите тест: Проверьте свои знания с помощью нашего интерактивного теста «Словари Python». По завершении вы получите оценку, чтобы вы могли отслеживать прогресс в обучении с течением времени:
Пройдите тест »
Определение словаря
Словари— это реализация Python структуры данных, более известная как ассоциативный массив. Словарь состоит из набора пар ключ-значение.Каждая пара ключ-значение отображает ключ на соответствующее значение.
Вы можете определить словарь, заключив разделенный запятыми список пар ключ-значение в фигурных скобках ( {}
). Двоеточие (:
) отделяет каждый ключ от соответствующего значения:
d = {
<ключ>: <значение>,
<ключ>: <значение>,
,
,
,
<ключ>: <значение>
}
Ниже определяется словарь, который сопоставляет местоположение с названием соответствующей бейсбольной команды Высшей лиги:
>>> >>> MLB_team = {
,.. "Колорадо": "Скалистые горы",
... «Бостон»: «Ред Сокс»,
... "Миннесота": "Близнецы",
... "Милуоки": "Пивовары",
... "Сиэтл": "Моряки"
...}
,