Словарь 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

.

Оцените статью
oilgasindustry.ru
Добавить комментарий