sorted_pairs = OrderedDict(sorted(pairs.items(), key=lambda x: x[1]))
for key, value in sorted_pairs.items():
print(key, value)
Сортировка словаря по длине строки ключа (в порядке возрастания):
from collections import OrderedDict
def sort_dict_by_key_length(dictionary):
sorted_dict = OrderedDict(sorted(dictionary.items(), key=lambda x:
len(x[0])))
return sorted_dict
dictionary = {"applegak": 3, "banana": 5, "cherry": 6, "date": 4}
sorted_dictionary = sort_dict_by_key_length(dictionary)
print(sorted_dictionary)
1.5 Класс ChainMap
модуль collection python кортеж named tuple
Контейнер ChainMap в Python предоставляет удобный способ объединять несколько словарей в единый словарь.
ChainMap объединяет словари в цепочку, поэтому они отображаются как единый словарь. Одна из особенностей ChainMap заключается в том, что он сохраняет ссылки на исходные словари (или другие маппинги), а не создает новый словарь. Это означает, что изменения, внесенные в ChainMap, будут отражаться на исходных словарях.
Вы можете выполнять все операции, которые обычно выполняются со словарем, на ChainMap. Например, вы можете получать значения по ключу, добавлять новые элементы, обновлять значения существующих ключей и т.д.
Чтобы начать использовать цепную карту, мы должны сначала импортировать ее из модуля collections. [6]
from collections import ChainMap
A = {"pen": 15, "eraser": 22}
B = {"marker": 10}
chain = ChainMap(A, B)
print(chain)
После создания объекта ChainMap, вы можете обращаться к его элементам так же, как к обычному словарю. Вы можете использовать квадратные скобки [] и указывать ключ для доступа к значению, или вы можете использовать метод.get() для безопасного доступа к элементам ChainMap.
Важно помнить, что если один и тот же ключ присутствует в нескольких словарях, составляющих ChainMap, то будет возвращено первое вхождение ключа. Это определяется порядком, в котором словари были переданы при создании ChainMap.
from collections import ChainMap
A = {"pen": 15, "eraser": 22}
B = {"marker": 10, "eraser": 40}
chain = ChainMap(A, B)
print(chain["eraser"])
Добавление нового словаря в цепную карту
Поскольку внутри ChainMap используется список, вы можете использовать метод .maps.append() для добавления словаря в конце цепочки.
from collections import ChainMap
A = {"pen": 15, "eraser": 22}
B = {"marker": 10, "eraser": 40}
chain = ChainMap(A, B)
print(chain)
C = {"chart": 50}
chain.maps.append(C)
print(chain)
Чтобы добавить новый словарь в начало цепочки, используйте метод .new_child().
from collections import ChainMap
A = {"pen": 15, "eraser": 22}
B = {"marker": 10, "eraser": 40}
chain = ChainMap(A, B)
print(chain)
C = {"chart": 50}
chain = chain.new_child(C)
print(chain)
Операции мутации
Цепная карта поддерживает операции добавления, обновления и удаления пар ключ-значение. Однако, эти операции влияют только на первый словарь в цепной карте, даже если ключ присутствует в других словарях.
Итерация по цепной карте
Мы можем выполнять итерации по цепной карте, как по обычному словарю, используя метод .items()
from collections import ChainMap
A = {"pen": 15, "eraser": 22}
B = {"marker": 10, "eraser": 40}
chain = ChainMap(A, B)
for k, v in chain.items():
print(k, ":", v)
При встрече ключа более одного раза, то печатается только первое вхождение ключа. В нашем примере eraser встречается два раза, но печатается только первое вхождение
Мы также можем получить список ключей и значений, используя методы .keys() и .values().
from collections import ChainMap
A = {"pen": 15, "eraser": 22}
B = {"marker": 10, "eraser": 40}
chain = ChainMap(A, B)
keys = list(chain.keys())
values = list(chain.values())
print("Keys", keys)
print("Values", values)
1.6 Класс UserList
UserList является классом-оболочкой для объектов списка, который предоставляет удобный способ создания пользовательских списков с измененной или дополнительной функциональностью. Он действует как обертка вокруг обычного списка, и может использоваться для добавления нового поведения к списку.
UserList обеспечивает более гибкий подход к настройке функциональности списка. Он принимает экземпляр списка в качестве аргумента при создании экземпляра и эмулирует список, сохраненный внутри.
from collections import UserList
L = [1, 2, 3, 4]
# Creating a userlist
userL = UserList(L)
print(userL.data)
# Creating empty userlist
userL = UserList()
print(userL.data)
Польза UserLists
Предположим, вы хотите удвоить все элементы в определенных списках. Или, может быть, вы хотите убедиться, что ни один элемент не может быть удален из заданного списка. В таких случаях нам нужно добавить в наши списки определенное «поведение», что можно сделать с помощью UserLists. Давайте рассмотрим, как можно использовать UserList для переопределения функциональности встроенного метода. Приведенный ниже код предотвращает добавление нового значения в список:
# Создание списка пользователей, в котором добавление новых
элементов запрещено.
from collections import UserList
class user_list(UserList):
# функция, вызывающая ошибку при вставке
def append(self, s=None):
raise RuntimeError("Authority denied for new insertion")
my_list = user_list([11, 22, 33, 44])
# попытка вставить новый элемент
my_list.append(55)
Код выводит сообщение RunTimeError и не позволяет добавить элемент в список. Это может быть полезно, если вы хотите не допустить внесения информации после определенного срока.
1.7 Класс UserString
Класс UserString из модуля collections в Python действительно предоставляет возможность создания пользовательских объектов, подобных строкам. Он является оболочкой для объектов строки (string), которая разработана для упрощения создания подклассов строк.
Аналогично классам UserList и UserDict, создание подклассов встроенных неизменяемых типов, таких как str, может быть сложным из-за их особенной реализации и оптимизации. Класс UserString решает эту проблему, предоставляя удобный интерфейс и методы для работы с объектами типа str. Он позволяет создавать пользовательские подклассы строк с дополнительной функциональностью или измененным поведением.
Класс UserString предлагает более понятный для Python и предсказуемый способ реализации пользовательского строкового поведения. .[8]
UserString можно использовать для изменения строк или выполнения определенных функций.
Предположим, вы хотите удалить определенное слово из текстового файла (где бы оно ни было). Возможно, некоторые слова в тексте неуместны.
Давайте посмотрим на пример того, как UserString можно использовать для удаления определенных слов из строки.
print(fruits)
# Использование UserString для удаления определенных слов из
текстового файла from collections import UserString
class user_string(UserString):
def append(self, new):
self.data = self.data + new
def remove(self, s):
self.data = self.data.replace(s, "")
text = 'apple orange grapes bananas pencil strawberry watermelon eraser'
fruits = user_string(text)
for word in ['pencil', 'eraser']:
fruits.remove(word)
В этом примере pencil и eraser были удалены с помощью функционального класса user_string.
Также можно заменить слово другим во всем файле.
# используя UserString для замены имени или слова по всему тексту.
from collections import UserString
class user_string(UserString):
def append(self, new):
self.data = self.data + new
def replace(self, replace_text): self.data = self.data.replace(replace_text,
'The Chairman')
text = 'Rajesh concluded the meeting very late. Employees were
disappointed with Rajesh'
document = user_string(text)
document.replace('Rajesh')
print(document.data)
Слово Rajesh везде заменяется на The Chairman.
1.8 Класс UserDict
Класс UserDict из модуля collections в Python используется для создания подклассов словаря и позволяет улучшить или изменить его поведение по умолчанию. Вместо создания экземпляров словаря, этот класс создает подклассы словаря.
UserDict эмулирует словарь, предоставляя тот же интерфейс и методы, что и встроенный тип dict. Он делает исходный словарь доступным через атрибут .data, который хранит его содержимое. Это позволяет создавать пользовательские методы и поведение, которые могут получать доступ к базовым данным.
Давайте посмотрим, как определяется класс и как создать простой UserDict:
# Создание пользовательского указателя
from collections import UserDict
class Custom(UserDict):
pass
custom_dict = Custom({'Name': 'Nik', 'Age': 33})
print(custom_dict)
Если некоторые ключи имеют ненужные значения, и вам нужно заменить их на 0. Эту проблему можно решить следующим образом:
from collections import UserDict
class user_dict(UserDict):
def replace(self, key):
self[key] = '0'
file = user_dict({'red':5, 'white': 2, 'black': 1, 'blue': 4567890})
# Delete 'blue' and 'yellow'
for i in ['blue', ' red ']:
file.replace(i)
print(file)
Вот так, поле с ненужными значениями заменено на 0.
2. Особенности и преимущества модуля collections по сравнению с другими подобными инструментами
Модуль collections в Python предоставляет удобные структуры данных и алгоритмы, которые помогают решать различные задачи с минимальными усилиями. Вот некоторые особенности и преимущества модуля collections по сравнению с другими подобными инструментами:
1. Итерируемые и упорядоченные контейнеры: Модуль collections предлагает различные итерируемые контейнеры, такие как deque, defaultdict, OrderedDict и namedtuple, которые обеспечивают упорядоченность элементов и, таким образом, упрощают их обработку.
2. Дополнительные и специализированные контейнеры: Для решения специфических задач модуль collections предлагает контейнеры, такие как Counter для подсчета элементов, ChainMap для объединения словарей и UserDict, который предоставляет удобный интерфейс для создания пользовательских словарей.
3. Удобство и простота использования: Большинство классов из модуля collections имеют интуитивно понятный интерфейс и простые методы, что делает их использование и понимание более простыми по сравнению с другими инструментами.
4. Расширяемость и гибкость: Модуль collections позволяет создавать собственные подклассы с использованием уже предоставляемых классов. Это позволяет создавать контейнеры с уникальными свойствами и методами, обеспечивая гибкость и расширяемость.
5. Высокая производительность: Модуль collections оптимизирован для обеспечения высокой производительности. Например, класс deque предоставляет константное время вставки и удаления элементов из обоих концов контейнера и имеет преимущества в скорости по сравнению с использованием списка.
3. Перспективы развития модуля collections для Python
Модуль collections является частью стандартной библиотеки Python и предоставляет различные контейнерные типы данных, которые являются альтернативой стандартным встроенным типам данных, таким как списки и словари.
Перспективы развития модуля collections включают следующие аспекты:
1. Добавление новых типов данных: В будущем могут быть добавлены новые классы типов данных в модуль collections, чтобы предоставить разработчикам еще больше возможностей для работы с данными.
2. Улучшение производительности и эффективности: Модуль collections может быть оптимизирован для более эффективного использования памяти и более быстрого выполнения операций.
3. Введение новых функций и методов: Могут быть добавлены новые функции и методы для более удобного использования классов из модуля collections, что сделает код более читаемым и понятным.
4. Интеграция с другими модулями и библиотеками: Модуль collections может быть интегрирован с другими модулями и библиотеками, чтобы предоставить расширенные возможности и функциональность.
5. Развитие и поддержка: Модуль collections будет развиваться и поддерживаться сообществом разработчиков Python, что гарантирует его актуальность и соответствие современным требованиям.
В целом, перспективы развития модуля collections для Python обещают расширение его функциональности и улучшение производительности, что будет способствовать более эффективной разработке программ на языке Python.
Заключение
Исследование модуля collections в языке программирования Python позволило получить глубокое понимание его функций и возможностей. В результате работы становится ясно, что модуль collections является мощным инструментом, который помогает в работе с данными и упрощает решение широкого спектра задач. Он предоставляет удобные и эффективные структуры данных, которые повышают производительность и упрощают кодирование.
Список использованной литературы
В процессе подготовки курсовой работы были использованы разнообразные литературные источники, включая книги, статьи и онлайн-ресурсы, посвященные изучению модуля collections в языке программирования Python. Эти материалы предоставили фундаментальные знания о функционале модуля и его применении в реальных проектах. Ключевым ресурсом в процессе исследования стало официальное руководство Python, содержащее подробные описания методов и функций модуля collections.