Словари (dict) и работа с ними. Методы словарей | Python 3

Словари (dict) и работа с ними. Методы словарей | Python 3
На чтение
20 мин.
Просмотров
93
Дата обновления
10.03.2025
#COURSE##INNER#

Для эффективной работы с данными в Python, используйте словари (dict). Они представляют собой неупорядоченные коллекции пар "ключ-значение", где ключи уникальны и неизменяемы (например, строки, числа). Ключи позволяют быстро находить соответствующие значения.

Вот пример создания и доступа к элементам словаря:

my_dict = {"name": "Иван", "age": 30, "city": "Москва"}

Ключевые методы работы со словарями:

Метод get():

value = my_dict.get("occupation", "Не указано")

Этот метод возвращает значение по ключу, но если ключ отсутствует, то возвращает значение по умолчанию (в данном случае "Не указано"). Это предохраняет от ошибок, возникающих при доступе к несуществующему ключу.

Метод keys():

Возвращает итератор, содержащий все ключи словаря.

Метод values():

Возвращает итератор, содержащий все значения словаря.

Метод items():

Возвращает итератор, содержащий все пары "ключ-значение" в виде кортежей.

Методы update(), pop(), popitem(), clear():

Эти методы служат для изменений и удаления элементов словаря. Изучите их документацию для понимания способов добавления, удаления и модификации данных.

Словари (dict) и работа с ними. Методы словарей Python 3

Для эффективной работы со словарями (dict) в Python 3, используйте методы:

1. `get(key, default)`: Возвращает значение по ключу key. Если ключа нет, возвращает значение default (по умолчанию None), а не вызывает ошибку KeyError.

Пример:

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

value = my_dict.get('a') # value = 1

value = my_dict.get('c') # value = None

value = my_dict.get('c', 0) # value = 0 (установлено значение по умолчанию)

2. `items()`: Возвращает список кортежей (ключ, значение) из словаря.

Пример:

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

items_list = my_dict.items() # items_list = dict_items([('a', 1), ('b', 2)])

3. `keys()`: Возвращает итератор ключей в словаре, обычно конвертируйте его в список.

Пример:

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

keys_list = list(my_dict.keys()) # keys_list = ['a', 'b']

4. `values()`: Возвращает итератор значений в словаре. Обычно конвертируйте его в список.

Пример:

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

values_list = list(my_dict.values()) # values_list = [1, 2]

5. `pop(key, default)`: Удаляет и возвращает значение по ключу. Если ключа нет, возвращает значение default или вызывает KeyError если default не указан.

Пример:

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

value = my_dict.pop('a') # value = 1, my_dict = {'b': 2}

value = my_dict.pop('c', -1) # value = -1, my_dict без изменений

6. `update()`: Обновляет словарь, добавляя или перезаписывая пары "ключ-значение".

Пример:

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

my_dict.update({'c': 3, 'a': 4}) # my_dict = {'a': 4, 'b': 2, 'c': 3}

Создание и инициализация словарей

Для создания словаря используйте фигурные скобки {} или функцию dict().

Способ 1 (используя фигурные скобки):


my_dict = {'ключ1': значение1, 'ключ2': значение2}

Способ 2 (используя функцию dict()):


my_dict = dict(ключ1=значение1, ключ2=значение2)

В обоих случаях, ключ - это строка (или другой неизменяемый тип данных), а значение - это произвольное значение (любой тип данных).

Примеры инициализации словарей:


# Словарь с целыми числами
ages = {'Иван': 30, 'Мария': 25}
# Словарь со строками
cities = {'страна': 'Россия', 'город': 'Москва'}
# Словарь со смешанными типами данных
info = {'имя': 'Петр', 'возраст': 28, 'город': 'Санкт-Петербург', 'есть_жена': True}
#Пустой словарь
empty_dict = {}
# Словарь с пустым значением по ключу
empty_values = {'имя': None, 'возраст': None}

Важно: ключи должны быть уникальными. Попытка добавить дублирующий ключ приведет к обновлению значения, соответствующего этому ключу.

Метод fromkeys():


keys = ['name', 'age', 'city']
values = ['John', 30, 'New York']
my_dict = dict.fromkeys(keys, 'Unknown')  #Заполняет значения по умолчанию
for i in range(len(values)):
my_dict[keys[i]] = values[i]
#  result: {'name': 'John', 'age': 30, 'city': 'New York'}

Этот метод удобно использовать для создания словарей с заранее определенными ключами с одинаковым значением по умолчанию.

Доступ к элементам словаря

Для доступа к элементам словаря используйте имя словаря и ключи в квадратных скобках.

Пример:


my_dict = {'name': 'John', 'age': 30, 'city': 'New York'}
name = my_dict['name']  # Получим значение 'John'
print(name)

Ключи должны быть неизменяемыми типами данных (например, строками, числами или кортежами).

Ошибка:


my_dict = {'name': 'John'}
my_dict[1]  # Ошибка: Неправильный тип ключа

При попытке доступа к несуществующему ключу возникает исключение KeyError.

Пример обработки ошибок:


my_dict = {'name': 'John'}
try:
value = my_dict['age']
print(value)
except KeyError:
print("Ключ 'age' не найден.")

Для проверки наличия ключа используйте метод in.

Пример:


my_dict = {'name': 'John'}
if 'name' in my_dict:
print("Ключ 'name' существует.")

Метод get() позволяет получить значение по ключу, но если ключ не найден, возвращается None (или заданное значение по умолчанию).


my_dict = {'name': 'John'}
value = my_dict.get('age')   # value = None
value = my_dict.get('age', 0) # value = 0
value = my_dict.get('name')   # value = 'John'

Изменение и удаление элементов словаря

Для изменения значения элемента используйте прямое присваивание.

Пример:

my_dict = {'name': 'Alice', 'age': 30}
my_dict['age'] = 31
print(my_dict)  # Выведет: {'name': 'Alice', 'age': 31}

Для добавления нового элемента используйте аналогичный подход. Переопределять не существующие ключи - это добавление.

Пример:

my_dict['city'] = 'New York'
print(my_dict)  # Выведет: {'name': 'Alice', 'age': 31, 'city': 'New York'}

Для удаления элемента используйте метод pop(). Он удаляет элемент по ключу и возвращает его значение.

  • pop(key) - удаляет элемент с ключом key и возвращает его значение.
  • Если ключа key нет, то генерируется исключение KeyError.
  • Для безопасного удаления используйте обработчик исключений try...except.

Пример безопасного удаления:

my_dict = {'name': 'Alice', 'age': 30}
try:
removed_value = my_dict.pop('age')
print(f'Удалён элемент: {removed_value}')
except KeyError:
print('Ключ не найден')
print(my_dict)  # Выведет: {'name': 'Alice'}

Метод popitem() удаляет произвольный элемент и возвращает его как пару (ключ, значение).

Пример:

my_dict = {'name': 'Alice', 'age': 30}
removed_item = my_dict.popitem()
print(f'Удалён элемент: {removed_item}')
print(my_dict)

Метод del удаляет элемент по ключу. Если ключа нет, вызывается исключение KeyError.

Пример:

my_dict = {'name': 'Alice', 'age': 30}
del my_dict['name']
print(my_dict)  # Выведет: {'age': 30}

Для очищения всего словаря используйте метод clear().

Пример:

my_dict.clear()
print(my_dict) # Выведет: {}

Методы словарей: поиск, проверка, сортировка

Для поиска значения в словаре используйте метод get(). Он безопаснее, чем прямой доступ по ключу, так как возвращает None, если ключ не найден. Например:

Код Результат
my_dict = {'a': 1, 'b': 2}
value = my_dict.get('a')
value = my_dict.get('c')
1
None

Метод in позволяет проверить, существует ли ключ в словаре:

Код Результат
my_dict = {'a': 1, 'b': 2}
if 'a' in my_dict:
print('Ключ "a" есть в словаре')
if 'c' in my_dict:
print('Ключ "c" есть в словаре')
Ключ "a" есть в словаре

Для быстрого перебора всех ключей в отсортированном порядке используйте функцию sorted():

Код Результат
my_dict = {'b': 2, 'a': 1}
sorted_keys = sorted(my_dict.keys())
for key in sorted_keys:
print(f"Ключ: {key}, Значение: {my_dict[key]}")
Ключ: a, Значение: 1
Ключ: b, Значение: 2

Обратите внимание: при сортировке изменяется только порядок перебора, сам словарь не меняется.

Словари и другие типы данных: вложенные словари, списки словарей

Для хранения структурированной информации, использующей несколько уровней, применяйте вложенные словари и списки словарей. Например, для хранения данных о пользователях с адресами:

users = { 'user1': {'name': 'Иван', 'address': {'street': 'Улица 1', 'city': 'Город А'}}, 'user2': {'name': 'Петр', 'address': {'street': 'Улица 2', 'city': 'Город Б'}} }

Здесь users – словарь, где ключи – имена пользователей, а значения – еще один словарь с данными о пользователях. Вложенный словарь хранит данные об адресе пользователя.

Для работы со списками словарей, например, списком заказов:

orders = [ {'order_id': 1, 'customer': 'Клиент 1', 'items': [{'item_id': 11, 'name': 'Товар 1', 'price': 10}]}, {'order_id': 2, 'customer': 'Клиент 2', 'items': [{'item_id': 12, 'name': 'Товар 2', 'price': 20}]} ]

С помощью циклов вы можете легко обращаться к данным в структуре.

for order in orders: print(f"Заказ {order['order_id']}, клиент: {order['customer']}") for item in order['items']: print(f" Товар {item['name']}, цена: {item['price']}")

Результат будет содержать информацию обо всех заказах и товарах в них. Важно осознавать структуру и уровни вложенности для правильной работы с данными.

Практические задачи и примеры

Реализуйте программу, которая строит словарь сотрудников с их отделами. Введите данные и выведите список сотрудников и их отделов.

Решение:


employees = {
"Иван Иванов": "Отдел продаж",
"Петр Петров": "Отдел разработки",
"Мария Сидорова": "Отдел маркетинга",
"Анна Иванова": "Отдел продаж"
}
for employee, department in employees.items():
print(f"{employee}: {department}")

Задача 2: Создайте словарь, хранящий информацию о товарах. Ключ – название товара, значение – цена.

  • Добавьте новые товары и их цены.
  • Выведите список всех товаров и их цен.
  • Найдите цену определенного товара.

Решение:


products = {
"Товар А": 100,
"Товар Б": 50,
"Товар С": 200
}
# Добавление нового товара
products["Товар D"] = 150
for product, price in products.items():
print(f"{product} - {price}")
# Поиск цены товара
product_to_find = "Товар С"
if product_to_find in products:
price = products[product_to_find]
print(f"Цена {product_to_find}: {price}")
else:
print(f"Товара {product_to_find} нет в списке.")

Задача 3: Работа с вложенными словарями.

Представьте, что нужно хранить данные о пользователях, включая их адрес.


users = {
"Иван": {
"город": "Москва",
"улица": "Пушкина",
"дом": 10
},
"Петр": {
"город": "СПб",
"улица": "Невского",
"дом": 15
}
}
user_to_find = "Иван"
if user_to_find in users:
address = users[user_to_find]
print(f"Адрес {user_to_find} : {address['город']}, {address['улица']} {address['дом']}")
else:
print(f"Пользователя {user_to_find} нет в списке.")

Рекомендация: При работе с большими словарями используйте циклы для эффективного доступа к данным.

Вопрос-ответ:

0 Комментариев
Комментариев на модерации: 0
Оставьте комментарий