Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Современные средства разработки программного обеспечения. Учебное пособие

.pdf
Скачиваний:
1
Добавлен:
08.09.2026
Размер:
2 Мб
Скачать
☆
111
"model": "2106",
"year": 1989
}
car.pop("year")
Пример. Метод popitem() удаляет последний добавленный элемент (в версиях до 3.7 вместо него удаляется случайный элемент):
car = {
"brand": "Lada",
"model": "2106",
"year": 1989
}
car.popitem()
print(car)
Пример. Ключевое слово del удаляет элемент с указанным именем ключа:
car = {
"brand": "Lada",
"model": "2106",
"year": 1989
}
del car["model"]
print(thisdict)
Пример. Ключевое слово del также может полностью удалить словарь:
car = {
"brand": "Lada",
"model": "2106",
"year": 1989
}
del car
print(car) #это вызовет ошибку, поскольку "car" больше не суще-
ствует.
Пример. Метод clear() очищает словарь:
car = {
"brand": "Lada",
"model": "2106",
112
"year": 1989
}
car.clear()
print(car)
Копирование словаря
Нельзя скопировать словарь, просто набрав dict2 = dict1, потому что: dict2 будет являться ссылкой на dict1, а изменения, внесенные в dict1, автоматически также будут внесены в dict2. Т.е. так используют поверхностное клонирование.
Если это не цель, тогда нужно использовать глубокое клонирование.
Способ 1 – использовать встроенный метод словаря copy().
Пример. Создать копию словаря с помощью метода copy():
car = {
"brand": "Lada",
"model": "2106",
"year": 1989
}
newCar = car.copy()
print(newCar)
Способ 2 – использовать конструктор dict().
Пример. Создать копию словаря с помощью функции dict():
car = {
"brand": "Lada",
"model": "2106",
"year": 1989
}
newCar = dict(car)
print(newCar)
Сравнение
Способ 1. Использовать оператор = = для сравнения двух словарей в Python для
определения, идентичны словари или нет.
Пример. Идентичные словари.
dict1 = dict(name="Tom", Vehicle="Benz Car")
dict2 = dict(name="Tom", Vehicle="Benz Car")
113
dict1 == dict2
Вывод:
True
Пример. Неидентичные словари.
dict1 = dict(name="John", Vehicle="Benz Car")
dict2 = dict(name="Tom", Vehicle="Benz Car")
dict1 == dict2
Вывод:
False
Способ 2. Написать пользовательский код для сравнения двух словарей в Python [34].
Шаги для сравнения словарей с определением количества общих пар между этими словарями.
- Задать цикл for для обхода каждого элемента в одном из словарей.
- Сравнить каждый элемент этого словаря с другим словарем на основе об-
щего индекса.
- Если элементы равны, то поместить пару key:value в результирующий об-
щий словарь.
- После обхода всего словаря вычислить длину результирующего общего сло-
варя, чтобы определить количество общих элементов между словарями.
Пример. Метод сравнения двух словарей в Python.
В этом случае словари идентичны.
dict1 = dict(name="Tom", Vehicle="Mercedes Car")
dict2 = dict(name="Tom", Vehicle="Mercedes Car")
dict1_len = len(dict1)
dict2_len = len(dict2)
total_dict_count = dict1_len + dict2_len
shared_dict = {}
for i in dict1:
if (i in dict2) and (dict1[i] == dict2[i]):
114
shared_dict[i] = dict1[i]
len_shared_dict = len(shared_dict)
print("Общими элементами в словарях являются -", shared_dict)
print ("Общее количество элементов в словарях равно -",
len_shared_dict)
if len_shared_dict == total_dict_count / 2:
print("Словари идентичны")
else:
print ("Словари не идентичны")
Способ 3. Использование генератора списка для сравнения двух словарей.
Пример. Использовать генератор списка для сравнения двух словарей и про-
верки, существуют ли в словаре одинаковые пары ключ-значение или нет.
d = {"a": 3, "b": 2}
d1 = {"a": 2, "b": 3}
res = all((d1.get(k) == v for k, v in d.items()))
print(res)
Вывод:
False
Вложенные словари
Вложенность словаря означает помещение словаря внутрь другого словаря.
nested_dict = {'dict1': {'key_A': 'value_A'},
'dict2': {'key_B': 'value_B'}}
Пример. Создание вложенного словаря
dict = {'id': '12f', 'Name': 'Ivan', 'Language': {'A': 'Python',
'B': 'Java', 'C': 'PHP'}}
115
Рисунок 8.1 – Вложенный словарь
Добавление элементов во вложенный словарь.
Dict = { }
print("Initial nested dictionary:-")
print(Dict)
Dict['Dict1'] = {}
# Adding elements one at a time
Dict['Dict1']['name'] = 'Bob'
Dict['Dict1']['age'] = 21
print("\nAfter adding dictionary Dict1")
print(Dict)
# Adding whole dictionary
Dict['Dict2'] = {'name': 'Cara', 'age': 25}
print("\nAfter adding dictionary Dict1")
print(Dict)
Вывод:
Initial nested dictionary:-
{}
After adding dictionary Dict1
Словарь
keys
id
Name
Language
values
12f
Ivan
Nested keys
A
B
C
Ivan
Python
Java
PHP
116
{'Dict1': {'age': 21, 'name': 'Bob'}}
After adding dictionary Dict1
{'Dict1': {'age': 21, 'name': 'Bob'}, 'Dict2': {'age': 25,
'name': 'Cara'}}
Доступ к элементам вложенного словаря
Чтобы получить доступ к значению любого ключа во вложенном словаре, ис­пользуйте синтаксис индексирования [].
# Nested dictionary having same keys Dict = { 'Dict1': {'name': 'Ali', 'age': '19'}, 'Dict2': {'name': 'Bob', 'age': '25'}} # Prints value corresponding to key 'name' in Dict1 print(Dict['Dict1']['name']) # Prints value corresponding to key 'age' in Dict2 print(Dict['Dict2']['age'])
Вывод:
Ali
25
Удаление словарей из вложенного словаря
Удаление словарей из вложенного словаря может быть выполнено либо с по­мощью ключевого слова Python del, либо с помощью функции pop().
Dict = {'Dict1': {'name': 'Ali', 'age': 19},
'Dict2': {'name': 'Bob', 'age': 21}}
print("Initial nested dictionary:-")
print(Dict)
# Deleting dictionary using del keyword
print("\nDeleting Dict2:-")
del Dict['Dict2']
print(Dict)
# Deleting dictionary using pop function
print("Deleting Dict1:-")
Dict.pop('Dict1')
117
print (Dict)
Вывод:
Initial nested dictionary:-
{'Dict2': {'name': 'Bob', 'age': 21}, 'Dict1': {'name': 'Ali',
'age': 19}}
Deleting Dict2:-
{'Dict1': {'name': 'Ali', 'age': 19}}
Deleting Dict1:-
{}
8.2 Генерация словарей (dictionary comprehensions)
В Python можно создавать словари, используя простые выражения. По сути – это метод преобразования одного словаря Python (или любого итерируемого типа) в другой словарь с использованием одной строки кода.
Базовая форма для генерации словаря:
{key: value for (key, value) in iterable}
где:
− key: это выражение, которое определяет ключ для каждой записи словаря
Python.
− value: это выражение, которое предоставляет значение, соответствующее
каждому ключу.
− iterable: любой объект Python, над которым можно выполнять цикл (напри-
мер, список, кортеж, набор и т.д.).
Используя различные варианты итерируемого объекта, можно получить раз­личные способы генерации словарей.
Способ 1. Генерация словаря Python на основе двух списков. Функция zip() обычно используется для объединения двух списков.
Пример. Генерация словаря Python.
118
Даны два списка с именами ключей и значениями, которые перебирают с помо­щью функции zip () .
keys = ['a','b','c','d','e']
values = [1,2,3,4,5]
myDict = { k:v for (k,v) in zip(keys, values)}
# myDict = dict(zip(keys, values))
print (myDict)
Вывод :
{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}
Способ 2. Использование метода fromkeys()
Здесь мы используем метод fromkeys() , который возвращает словарь с опре­деленными ключами и значениями.
dic=dict.fromkeys(range(5), True)
print(dic)
Вывод:
{0: True, 1: True, 2: True, 3: True, 4: True}
Пример. Создать словарь, используя генератор словаря.
# Python code to demonstrate dictionary
# creation using list comprehension
myDict = {x: x**2 for x in [1,2,3,4,5]}
print (myDict)
Вывод:
{1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
Способ 3. Генерация словаря Python с помощью нескольких ключей [35].
Иногда требуется генерация словаря с несколькими ключами. Здесь генерация словаря Python используется с несколькими циклами, что позволяет создавать сло­варь на Python, где каждому ключу может соответствовать несколько значений, ча­сто организованных в виде списков.
Пример. Пусть задан список известных достопримечательностей и соответ­ствующих им городов. Пусть нужно создать словарь на Python, где каждому городу сопоставлен список его достопримечательностей.
landmarks = [('Statue of Liberty', 'New York'), ('Mount Rush-
more', 'South Dakota'), ('Hollywood Sign', 'California')]
119
landmark_dict = {state: [landmark for landmark, s in landmarks if
s == state] for landmark, state in landmarks}
print(landmark_dict)
Вывод: Здесь генерация словаря по нескольким ключам использует несколько циклов, чтобы сначала сгенерировать список достопримечательностей для каждого города, а затем сопоставить их с соответствующими городами.
{'New York': ['Statue of Liberty'], 'South Dakota': ['Mount Rush-
more'], 'California': ['Hollywood Sign']}
Способ 4. Генерация словаря Python с использованием if-else
Включение условного оператора if-else в генерацию словаря позволит: от­фильтровывать элементы и/или изменять значения элементов на основе условия. Ге­нератор словаря Python проверяет область каждого состояния и присваивает катего­рию на основе предоставленных условий if else.
Пример. Есть список городов и их общая площадь. Нужно классифицировать государства как "Большие", если их площадь превышает 1000000 кв. км., и "Малень­кие" в противном случае, используя генератор словаря с if else.
state_area = {'Tyumen region': 1464173, 'Buryatia': 351334, 'Al-
tai': 92903}
area_category = {state: 'Large' if area > 100000 else 'Small' for
state, area in state_area.items()}
print(area_category)
Вывод:
{'Tyumen region': 'Large', 'Buryatia': 'Small', 'Altai': 'Small'}
Способ 5. Генерация словаря Python с помощью defaultdict.
Можно эмулировать понимание defaultdict, объединив defaultdict из модуля collections с генератором словаря в Python. Это позволит автоматически инициали­зировать ключи словаря Python значениями по умолчанию, такими как пустые списки.
Пример. Сгруппировка городов по их начальной букве, используя комбина­цию defaultdict и генератор словаря, эмулируя defaultdict.
from collections import defaultdict
120
us_cities = ['Denver', 'Detroit', 'Dallas', 'Boston', 'Balti-
more']
city_dict_default = defaultdict(list)
{city_dict_default[city[0]].append(city) for city in us_cities}
print(dict(city_dict_default))
Вывод:
{'D': ['Denver', 'Detroit', 'Dallas'], 'B': ['Boston', 'Baltimore']}
Способ 6. Генерация словаря Python с заменой ключей и значений
Сгенерировать словарь из заданного, поменяв местами роли ключей и значе­ний в словаре.
Пример. Задан словарь с информацией об автомобильных производителях и их центральных офисах.
car_manufacturer_location = {
'Ford': 'Dearborn',
'Avtovaz': 'Tolyatti',
'BMW': 'Munich'
}
swapped_dict = {location: manufacturer for manufacturer, location
in car_manufacturer_location.items()}
print(swapped_dict)
Результат:
{'Dearborn': 'Ford', 'Tolyatti': 'Avtovaz', 'Munich': 'BMW'}
Способ 7. Генерация словаря Python из другого словаря
Создание нового словаря на Python на основе существующего путем примене­ния некоторых операций или фильтрации.
Пример. Дан словарь Python для среднемесячных температур в градусах Цель- сия для различных городов, и нам нужен словарь только с теми городами, где сред­няя температура выше 25.
avg_temps = {
'Sydney': 18.8,
'Havana': 25.2,
'Dubai': 26.9,
'Sofia': 10.6,
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]