Словарь Python — это структура данных, аналогичная ассоциативному массиву в других языках программирования. Массив или список индексируют элементы по позиции. С другой стороны, словарь индексирует элементы по ключам , которые могут быть строками. Думайте о словаре как о неупорядоченных наборах пар .

В этой статье мы познакомим вас с работой со словарем Python.
- Создание словаря
- Указание пар ключ-значение
- Массив кортежей «ключ-значение»
- Понимание словаря
- Работа со словарем Python
- Доступ к элементам словаря Python
- Проверка существования
- Изменение элементов
- Удаление элементов
- Цикл со словарями Python
- Цикл по ключам
- Цикл по парам «ключ-значение»
- Итерация по значениям
- Извлечение массивов
- Как вы используете словари Python?
Создание словаря
Есть несколько способов создания словаря Python. В простейшем случае используется инициализация скобок с синтаксисом, напоминающим JSON.
users = {'firstname': 'John', 'lastname': 'Smith', 'age': 27}
Вы также можете использовать цифры в качестве ключей. Однако будьте осторожны, используя числа с плавающей запятой в качестве ключей, поскольку компьютер сохраняет их как приближенные значения.
rain_percent = {1980: '17% ', 1981: '15%', 1982: '10% '}
print rain_percent
print rain_percent [1980]
# выводит
{1980: '17% ', 1981: '15%', 1982: '10% '}
17%
Указание пар ключ-значение
Вы также можете создать и инициализировать словарь, используя пары имя-значение в качестве аргументов ключевого слова для dict () конструктор.
Population = dict (California = 37253956, Colorado = 5029196, Connecticut = 3574097, Delaware = 897934)
печать населения
# печатает
{'Коннектикут': 3574097, 'Делавэр': 897934, 'Калифорния': 37253956, 'Колорадо': 5029196}
Массив кортежей «ключ-значение»
Еще один способ создания словаря — использовать массив кортежей «ключ-значение». Вот тот же пример, что и выше.
pair = [('Калифорния', 37253956), ('Колорадо', 5029196), ('Коннектикут', 3574097), ('Делавэр', 897934)]
Population = dict (pair)
print population
# выводит
{'Коннектикут': 3574097, 'Делавэр': 897934, 'Калифорния': 37253956, 'Колорадо ': 5029196}
Понимание словаря
Понимание словаря обеспечивает отличный синтаксис для инициализации словаря, если вы можете вычислить значения на основе на ключах. Следующее инициализирует набор чисел и квадратов для диапазона чисел..
print {x: x ** 2 for x in xrange (10, 20)}
# выводит
{10: 100, 11 : 121, 12: 144, 13: 169, 14: 196, 15: 225, 16: 256, 17: 289, 18: 324, 19: 361}
Как это работает? Последняя часть ( для x в xrange (10, 20) ) возвращает диапазон чисел в указанном диапазоне. Часть понимания dict ( {x: x ** 2 ..} ) проходит по этому диапазону и инициализирует словарь.
Работа со словарем Python
Что вы можете делать со словарями после их создания? Что ж, вы можете получить доступ к элементам, обновить значения, удалить элементы и т. Д.
Доступ к элементам словаря Python
Доступ к элементу dict с помощью ключа в скобках, просто как массив или список.
печатное население ['Делавэр']
# печатает
897934
Если ключ — это число, кавычки не нужны. Тогда выражение выглядит как индексирование списка или массива.
print rain_percent [1980]
# выводит
17%
Тип ключа при доступе к нему должен соответствовать тому, что хранится в словаре Python. Следующее вызывает ошибку, поскольку сохраненные ключи являются числами, а ключ доступа — строкой.
x = '1980'
print rain_percent [x]
# возвращает
1 x = '1980'
----> 2 print rain_percent [x]
KeyError: '1980'
Доступ к несуществующему ключу является ошибкой.
rain_percent = {1980: '17% ', 1981: '15%', 1982: '10% '}
print rain_percent [1983]
# выводит
1 rain_percent = {1980: '17% ', 1981: '15%', 1982: '10% '}
----> 2 выводит rain_percent [1983 ]
KeyError: 1983
Чтобы получить доступ к ключу и предоставить значение по умолчанию, если сопоставление не существует, используйте get () со значением по умолчанию в качестве второго аргумента.
print rain_percent.get (1985, '0%')
# выводит
0%
Проверка существования
Что делать, если вы хотите проверить наличие ключа, не пытаясь получить к нему доступ (и, возможно, столкнувшись с KeyError как указано выше)? Вы можете использовать ключевое слово in в форме ключа в dct , которое возвращает логическое значение.
print 1980 in rain_percent
print '1980' in rain_percent
# выводит
True
False
Отмените условие (т. е. убедитесь, что ключ отсутствует в словаре Python), используя форму ключ не в dct . Это эквивалентно стандартному отрицанию Python not key в dct .
print 1980 not in rain_percent
print 1985 not in rain_percent
# выводит
False
True
Изменение элементов
Измените значение, назначив на нужный ключ.
users = {'firstname': 'John', 'lastname': 'Smith', 'age': 27}
users ['age'] = 29
print users
# выводит
{'lastname': 'Smith', 'age': 29, 'firstname': 'John'}
Используйте тот же синтаксис, чтобы добавить новое сопоставление в словарь Python.
users ['dob'] = '15 -sep-1971 '
print users
# выводит
{' dob ': '15 -sep-1971', 'lastname': 'Smith', 'age': 29, 'firstname': 'John'}
Обновите несколько элементов словаря за один раз, используя метод update () .
users = {'firstname': 'John', 'lastname': 'Smith', 'age': 27}
users.update ({' age ': 29,' dob ': '15 -sep-1971'})
print users
# выводит
{'dob': '15 -sep-1971 ', 'lastname': 'Smith', 'age': 29, 'firstname': 'John'}
Установите значение по умолчанию для ключа с помощью setdefault () . Этот метод устанавливает значение для ключа, если сопоставление не существует. Возвращает текущее значение.
# не изменяет текущее значение
print users.setdefault ('firstname', 'Jane')
# печатает
Джон
# устанавливает значение
print users.setdefault ('city', 'NY')
# печатает
NY
# Конечное значение
print users
# выводит
{'lastname': 'Smith', 'age': 27, 'firstname': 'John', 'city': 'NY'}
Удаление элементов
Удалите сопоставления в словаре с помощью оператора del . Этот оператор ничего не возвращает.
Вы столкнетесь с ошибкой KeyError , если ключ не существует в словаре.
users = {'firstname': 'John', 'lastname': 'Smith', 'age': 27}
del users ['age' ]
print users
# выводит
{'lastname': 'Smith', 'firstname': 'John'}
Используйте вместо него метод pop () , если вы хотите вернуть удаленное значение.
users = {'firstname': 'John', 'lastname': 'Smith' , 'age': 27}
пользователей печати. pop ('age')
print users
# выводит
27
{'lastname': 'Smith', 'firstname': 'John'}
Что делать, если вы хотите удалить ключ, если он существует, не вызывая ошибки, если это не так? Вы можете использовать pop () и указать None для второго аргумента следующим образом:
users = { 'firstname': 'John', 'lastname': 'Smith', 'age': 27}
users.pop ('foo', None)
распечатать пользователей
# печатает
{'lastname': 'Smith', 'age': 27, 'firstname': 'John'}
А вот однострочник для удаления связки ключей из словаря, не вызывая ошибки на несуществующих ключах.
users = {'firstname': 'John', 'lastname': 'Smith', 'age': 27, 'dob': '15 -sep-1971 ' }
карта (лямбда x: users.pop (x, None), ['age', 'foo', 'dob'])
распечатать пользователей
Хотите удалить все ключи из словаря? Используйте метод clear () .
users = {'firstname': 'John', 'lastname': 'Smith' , 'age': 27}
users.clear ()
print users
# выводит
{}
Цикл со словарями Python
Python предоставляет множество методов для перебора записей словаря. Выберите тот, который вам больше всего подходит.
Цикл по ключам
- Простейший метод последовательной обработки ключей (и, возможно, значений) использует цикл вида:
users = {'firstname': 'John', 'lastname': 'Smith', 'age': 27}
для k в пользователях:
print k, ' => ', users [k]
# выводит
lastname => Smith
age => 27
firstname => John
- Использование метода iterkeys () работает точно так же, как указано выше. Выбирайте, какую форму вы хотите использовать.
users = {'firstname': 'John', 'lastname': 'Smith', 'age': 27}
для k в users.iterkeys ():
print k, '=>', users [k]
# выводит
lastname => Smith
age => 27
firstname => John - Третий метод получения и обработки ключей в цикле включает использование встроенной функции iter () .
users = {'firstname': 'John', 'lastname': 'Smith', 'age': 27}
для k in iter (пользователи):
print k, '=>', users [k]
# выводит
lastname => Smith
age => 27
firstname => John
- Если вам нужен индекс обрабатываемого ключа, используйте встроенную функцию enumerate () как показано.
users = {'firstname': 'John', 'lastname': 'Smith', 'age': 27}
для индекса, введите enumerate (users):
print index, key, '=>', users [k]
# выводит
0 lastname => John
1 age => John
2 firstname => John
Цикл по парам «ключ-значение»
- Если вы хотите получить каждую пару «ключ-значение» за один вызов, используйте iteritems () .
users = {'firstname': 'John', 'lastname': 'Smith', 'age': 27}
для k, v в users.iteritems () :
print k, '=>', v
# выводит
lastname => Smith
age => 27
firstname => John
Итерация по значениям
- Метод itervalues () можно использовать для перебора всех значений в словаре. Хотя этот метод похож на цикл с использованием values () , он более эффективен, поскольку не извлекает все значения сразу.
users = {'firstname': 'John', 'lastname': 'Smith', 'age': 27}
для значения в users.itervalues ():
print value
# выводит
Smith
27
John
Извлечение массивов
Следующие методы описывают извлечение различной информации словаря Python в виде массива. Полученный массив можно перебрать с помощью обычных конструкций Python. Однако имейте в виду, что возвращаемый массив может быть большим в зависимости от размера словаря. Таким образом, обработка этих массивов может быть дороже (с точки зрения памяти) , чем использование описанных выше методов итератора.
Один из случаев, когда допустимо работать с этими массивами, — это когда вам нужно удалить элементы из словаря, поскольку вы встретите нежелательные элементы. Работа с итератором при изменении словаря может вызвать ошибку RuntimeError.
- Метод items () возвращает массив ключей -значные кортежи. Вы можете перебирать эти пары ключ-значение, как показано:
users = {'firstname': 'John', 'lastname': 'Smith', 'age': 27}
для k, v в пользователях. items ():
print k, '=>', v
# выводит
lastname => Smith
age => 27
firstname = > Джон
- Получите все ключи в словаре, используя метод keys () .
users = {'firstname': 'John', 'lastname': 'Smith', 'age': 27}
print users.keys ()
# выводит
['lastname', 'age', 'firstname']
Используйте возвращенный массив для циклического перебора ключей.
для k в users.keys ():
print k, '=>', users [k]
# выводит
lastname = > Смит
age => 27
firstname => Джон
- Аналогичным образом используйте метод values () , чтобы получить все значения в словаре.
для значения в users.values ():
print value
# выводит
Smith
27
Джон
Как вы используете словари Python?
Мы попытались охватить наиболее распространенные варианты использования Python словари в этой статье. Обязательно ознакомьтесь со всеми другими нашими статьями о Python, чтобы получить еще больше советов по Python. Если у вас есть другие варианты использования, которые, по вашему мнению, должны быть включены, сообщите нам об этом в комментариях ниже!
Изображение предоставлено: viper345/Shutterstock