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

Ссылка на основную публикацию
Adblock
detector