Словари Python

Содержание
Введение
Создать словарь
Добавить пару
Превратить в словарь
Копировать словарь
Update: добавить один словарь к другому либо изменить значения
Iteration: перебор элементов словаря
Items: перебор кортежами из пар ключ-значение
in, not in, del
pprint: читаемый вывод
get()
Похожие статьи

Введение

Официальная документация: 1 , 2

Создать словарь

Чтобы создать словарь нужно воспользоваться фигурными скобками {}

{key: value}

Ключ должен быть неизменяемым объектом, то есть число, строка или кортеж подойдут, а, например список нет

На сохранение порядка элементов в словаре рассчитывать нельзя.

>>> urls = { ... 'Forward': 'https://forward.bike', ... 'Shulz': 'https://velodrive.ru', ... 'Stels': 'https://velosklad.ru', ... 'TB': 'https://topbicycle.ru' ... }

Получился словарь из четырёх пар "ключ: значение"

>>> urls['Stels']

'https://velosklad.ru'

В качестве ключей можно использовать и числа

def Test(): numbers = { 0: "Zero", 1: "One" } o = numbers[0] print(o) if __name__ == "__main__": Test()

Zero

Добавить пару к словарю

Пара ключ-значение добавляется к словарю следюущим образом

my_dict["key"] = value

d = {"a": 1} d["b"] = 2 print(d)

{'a': 1, 'b': 2}

Превратить в словарь

С помощью функции dict() можно превратить в словарь список кортежей

names_and_ages = [('Alice', 32), ('Bob', 48), ('Charlie', 28), ('Daniel', 33)] d = dict(names_and_ages) print(d)

{'Alice': 32, 'Bob': 48, 'Charlie': 28, 'Daniel': 33}

Превратить список кортежей в словарь можно и без функции dict(), но это требует больше кода.

names_and_ages = [('Alice', 32), ('Bob', 48), ('Charlie', 28), ('Daniel', 33)] new_dict = {} for person in names_and_ages: new_dict[person[0]] = person[1] print(f"new_dict: {new_dict}")

new_dict: {'Alice': 32, 'Bob': 48, 'Charlie': 28, 'Daniel': 33}

С помощью dict() можно создать словарь перечислив через запятую аргументы типа ключ-значение

phonetic = dict(a="alfa", b="bravo", c="charlie", d="delta", e="echo", f="foxtrot") print(phonetic)

{'a': 'alfa', 'b': 'bravo', 'c': 'charlie', 'd': 'delta', 'e': 'echo', 'f': 'foxtrot'}

Копирование словарей как и списков это неполное (shallow copy) копирование то есть копируются не объекты а ссылки на них. Подробно разницу можно увидеть здесь

# copy dict d = dict(it="eth1.ru", bikes="topbicycle.ru", travel="heihei.ru") e = d.copy() print(e) f = dict(e) print(f) # Next method will not create a copy # g will be the same object g = e print(g) print(e is d) print(e == d) print(f is e) print(f == e) print(g is e) print(g == e) # Let's prove g is not a copy d["it"] = "eth1.ru" print('d["it"] = "eth1.ru"') print('d["it"] = "eth1.ru"') print("d: ", d) print("e: ", e) print("f: ", f) print("g: ", g) e["it"] = "devhops.ru" print('e["it"] = "devhops.ru"') print("e: ", e) print("f: ", f) print("g: ", g)

{'it': 'eth1.ru', 'bikes': 'topbicycle.ru', 'travel': 'heihei.ru'} {'it': 'eth1.ru', 'bikes': 'topbicycle.ru', 'travel': 'heihei.ru'} {'it': 'eth1.ru', 'bikes': 'topbicycle.ru', 'travel': 'heihei.ru'} False True False True True True d["it"] = "eth1.ru" d: {'it': 'eth1.ru', 'bikes': 'topbicycle.ru', 'travel': 'heihei.ru'} e: {'it': 'eth1.ru', 'bikes': 'topbicycle.ru', 'travel': 'heihei.ru'} f: {'it': 'eth1.ru', 'bikes': 'topbicycle.ru', 'travel': 'heihei.ru'} g: {'it': 'eth1.ru', 'bikes': 'topbicycle.ru', 'travel': 'heihei.ru'} e["it"] = "devhops.ru" e: {'it': 'devhops.ru', 'bikes': 'topbicycle.ru', 'travel': 'heihei.ru'} f: {'it': 'eth1.ru', 'bikes': 'topbicycle.ru', 'travel': 'heihei.ru'} g: {'it': 'devhops.ru', 'bikes': 'topbicycle.ru', 'travel': 'heihei.ru'}

Update: добавить один словарь к другому

# update d = dict(it="eth1.ru", bikes="topbicycle.ru", travel="heihei.ru") e = dict(hotels="booking.com", flights="aviasales.ru", trains="tutu.ru") print("d: ", d) print("e: ", e) e.update(g) print("e.update(g)") print("e: ", e)

d: {'it': 'eth1.ru', 'bikes': 'topbicycle.ru', 'travel': 'heihei.ru'} e: {'hotels': 'booking.com', 'flights': 'aviasales.ru', 'trains': 'tutu.ru'} e.update(g) e: {'hotels': 'booking.com', 'flights': 'aviasales.ru', 'trains': 'tutu.ru', 'it': 'devhops.ru', 'bikes': 'topbicycle.ru', 'travel': 'heihei.ru'}

С помощью update() можно не только добавить новые но и изменить старые значения.

print('d.update(it="eth1.ru")') print("d: ", d)

d.update(it="eth1.ru") d: {'it': 'eth1.ru', 'bikes': 'topbicycle.ru', 'travel': 'heihei.ru'}

Iteration: перебор элементов словаря

# iteration sites = dict( it="eth1.ru", bikes="topbicycle.ru", travel="heihei.ru", hotels="booking.com", flights="aviasales.ru", trains="tutu.ru" ) for key in sites: print(f"{key} => {sites[key]}")

it => eth1.ru bikes => topbicycle.ru travel => heihei.ru hotels => booking.com flights => aviasales.ru trains => tutu.ru

print("\nkeys:\n") for key in sites: print(key) for key in sites.keys(): print(key) print("\nvalues:\n") for value in sites.values(): print(value)

keys: it bikes travel hotels flights trains it bikes travel hotels flights trains values: eth1.ru topbicycle.ru heihei.ru booking.com aviasales.ru tutu.ru

Items: перебор кортежами из пар ключ-значение

С помощью items() можно перебирать парами ключ-значени, возвращаться будет кортеж (tuple)

# items print("\nitems:\n") for key, value in sites.items(): print(f"{key} => {value}")

items: it => eth1.ru bikes => topbicycle.ru travel => heihei.ru hotels => booking.com flights => aviasales.ru trains => tutu.ru

in, not in, del

# in and not in print("in and not in\n") sites = dict( it="eth1.ru", bikes="topbicycle.ru", travel="heihei.ru", hotels="booking.com", flights="aviasales.ru", trains="tutu.ru" ) print("it" in sites) # True print("eth1.ru" in sites) # False since eth1.ru is not a key print("velodrive" not in sites) # True # del del sites["hotels"] print('del sites["hotels"]') print(sites)

in and not in True False True del sites["hotels"] {'it': 'eth1.ru', 'bikes': 'topbicycle.ru', 'travel': 'heihei.ru', 'flights': 'aviasales.ru', 'trains': 'tutu.ru'}

Модификация значений внутри словаря

m = { 'H': [1, 2, 3], 'He': [3, 4], 'Li': [6, 7], 'Be': [7, 9, 10], 'B': [10, 11], 'C': [11, 12, 13, 14] } print(m) m['H'] += [4, 5, 6, 7] print(m) m['N'] = [13, 14, 15]

{'H': [1, 2, 3], 'He': [3, 4], 'Li': [6, 7], 'Be': [7, 9, 10], 'B': [10, 11], 'C': [11, 12, 13, 14]} {'H': [1, 2, 3, 4, 5, 6, 7], 'He': [3, 4], 'Li': [6, 7], 'Be': [7, 9, 10], 'B': [10, 11], 'C': [11, 12, 13, 14]} {'B': [10, 11], 'Be': [7, 9, 10], 'C': [11, 12, 13, 14],

pprint: читаемый вывод

С помощью pprint() можно вывести словарь на экран в читаемом виде

from pprint import pprint as pp m = { 'H': [1, 2, 3], 'He': [3, 4], 'Li': [6, 7], 'Be': [7, 9, 10], 'B': [10, 11], 'C': [11, 12, 13, 14] 'N': [13, 14, 15] } pp(m)

'H': [1, 2, 3, 4, 5, 6, 7], 'He': [3, 4], 'Li': [6, 7], 'N': [13, 14, 15]}

get()

С помощью метода get() можно получить значение по ключу.

Синтаксис

Dict.get(key, default=None)

Параметры:

key: имя ключа, значение которого нужно получить

Value: (Необязательный) значение которое нужно вернуть, если ключ не найден. По умолчанию возвращает None.

Пример: рассмотрим словарь где ключи - это названия городов Андалусии (Испания), а значение - это численность их населения в тысячах человек

Применим get() только с одним аргументом, затем с двумя для города из списка и города не из списка

cities = {"Benalmadena": 67, "Cordoba": 325, "Fuengirola": 75, "Malaga": 569, "Torremolinos": 68} print(cities.get("Cordoba")) print(cities.get("Malaga", "Unknown")) print(cities.get("Riga", "Unknown"))

325 569 Unknown

Рига - это город в Латвии а не в Испании, поэтому get() вернул Unknonw

Похожие статьи
Built-in Collections
Строки
f-string
format string
Списки []
list comprehension: Абстракция списка
Словари {:}
dict comprehension: Абстракция словаря
Множества {}
set comprehension: Абстракция множества
Кортежи ()
Протоколы
Итерация
Python
if, elif, else
Циклы

РЕКЛАМА хостинга Beget, которым я пользуюсь более десяти лет

Изображение баннера

Конец рекламы хостинга Beget, который я всем рекомендую.

Поиск по сайту

Подпишитесь на Telegram канал @aofeed чтобы следить за выходом новых статей и обновлением старых

Перейти на канал

@aofeed

Задать вопрос в Телеграм-группе

@aofeedchat

Контакты и сотрудничество:
Рекомендую наш хостинг beget.ru
Пишите на info@urn.su если Вы:
1. Хотите написать статью для нашего сайта или перевести статью на свой родной язык.
2. Хотите разместить на сайте рекламу, подходящую по тематике.
3. Реклама на моём сайте имеет максимальный уровень цензуры. Если Вы увидели рекламный блок недопустимый для просмотра детьми школьного возраста, вызывающий шок или вводящий в заблуждение - пожалуйста свяжитесь с нами по электронной почте
4. Нашли на сайте ошибку, неточности, баг и т.д. ... .......
5. Статьи можно расшарить в соцсетях, нажав на иконку сети: