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