Программа Python для поворота словаря на K
Реализация Python структуры данных, более известной как ассоциативный массив, представляет собой словарь. Словарь состоит из группы пар ключ-значение. Каждая комбинация «ключ-значение» соответствует ключу и соответствующему ему значению.
Учитывая словарь с некоторыми случайными парами ключ-значение, в этой статье мы узнаем, как вращать данный словарь на K в Python.
Используемые методы
Ниже приведены различные методы выполнения этой задачи:
Использование понимания списка, items() и понимания словаря
Использование словарного понимания, функций deque.rotate() и items().
Пример
Предположим, мы взяли входной словарь и K вращений. Теперь мы повернём входной словарь k раз и напечатаем результирующий словарь после k вращений.
Вход
inputDict = {2: 5, 4: 6, 1: 3, 9: 4, 5: 1}
k=3
Выход
{1: 3, 9: 4, 5: 1, 2: 5, 4: 6}
В приведенном выше примере значение K равно 3. Введите словарь после:
1-й оборот: {5:1, 2:5, 4:6, 1:3, 9:4}
2-й оборот: {9:4, 5:1, 2:5, 4:6, 1:3}
3-й оборот: {1:3, 9:4, 5:1, 2:5, 4:6}
Метод 1. Использование понимания списка, items() и понимания словаря.
В этом методе мы поймем, как использовать понимание списка и понимание словаря для поворота словаря на K.
Синтаксис
enumerate(iterable, start=0)
Метод enumerate() добавляет счетчик к итерируемому объекту и возвращает объект перечисления.
Параметры
iterable — это может быть любая последовательность/объект/итерируемый объект, поддерживающий итерацию.
start-enumerate() начинает отсчет с этого значения. Если начало не указано, используется значение 0.
Алгоритм (шаги)
Ниже приводится алгоритм/шаги, которые необходимо выполнить для выполнения желаемой задачи.
-
Создайте переменную для хранения входного словаря.
Распечатайте входной словарь.
Создайте еще одну переменную для хранения введенного количества k оборотов.
Используйте функцию items() (возвращает объект представления, т. е. он содержит пары ключ-значение словаря в виде кортежей в списке), чтобы получить ключ и значение словаря.
Преобразуйте это в список кортежей с помощью функции list() (преобразует последовательность/итерируемую информацию в список)
Перейдите по индексу, элементу списка, используя функцию enumerate(), и поверните его на k, используя математическую логику.
Снова преобразуйте список результатов кортежей в словарь, используя понимание словаря.
Распечатайте результирующий словарь после вращения словаря k раз.
Пример
Следующая программа возвращает словарь после поворота входного словаря на заданные входные вращения K, используя понимание списка, элементы() и понимание словаря:
# input dictionary
inputDict = {2: 5, 4: 6, 1: 3, 9: 4, 5: 1}
# printing input dictionary
print("Input Dictionary:", inputDict)
# input K rotations
k = 3
# getting the key, and value of the dictionary as a tuple and converting it into the list
inputDict = list(inputDict.items())
# rotationg the input dictionary by k rotations
resultList = [inputDict[(p - k) % len(inputDict)] for p, m in enumerate(inputDict)]
# converting the result list of tuples into a dictionary again
# using dictionary comprehension
resultantDict = {e[0]: e[1] for e in resultList}
# printing the resultant dictionary after given input k rotations
print("Resultant dictionary after", k, "rotations:", resultantDict)
Выход
При выполнении вышеуказанная программа сгенерирует следующий вывод:
Input Dictionary: {2: 5, 4: 6, 1: 3, 9: 4, 5: 1}
Resultant dictionary after 3 rotations: {1: 3, 9: 4, 5: 1, 2: 5, 4: 6}
Метод 2. Использование словарного понимания, функций deque.rotate() и items().
Двусторонняя очередь, также известная как deque, позволяет пользователям добавлять и удалять элементы с любого конца. Модуль Deque принадлежит библиотеке коллекций. Он предоставляет методы, которые можно использовать напрямую с аргументами для добавления и удаления элементов.
Когда нам нужны более быстрые операции добавления и извлечения с обоих концов контейнера, вместо списков выбирается deque, поскольку deque предлагает временную сложность O(1) для операций добавления и извлечения, тогда как списки предлагают временную сложность O(n) .
Функция deque.rotate() — дек поворачивается на число, указанное в аргументах с помощью этой функции. Вращение происходит влево, если заданное число отрицательно. В противном случае вращение будет вправо.
Алгоритм (шаги)
Ниже приводится алгоритм/шаги, которым необходимо следовать для выполнения желаемой задачи.
Используйте ключевое слово import, чтобы импортировать дек из модуля коллекций.
Используйте функцию items(), чтобы получить пары «ключ» и «значение» словаря.
Преобразуйте это в список кортежей с помощью функции list() (преобразует последовательность/итерацию в список)
Используйте функцию deque(), передав ей входной словарь в качестве аргумента, чтобы преобразовать словарь в двухстороннюю очередь.
Используйте функцию Rotate(), передав ей входное значение k, и примените его к деку, чтобы повернуть входной словарь на k вращений.
Используйте функцию list() (возвращает список итерируемых объектов), чтобы преобразовать результат в список.
Снова преобразуйте список результатов кортежей в словарь, используя понимание словаря.
Распечатайте результирующий словарь после вращения словаря k раз.
Пример
Следующая программа возвращает словарь после поворота входного словаря на заданные входные вращения K с использованием словарного понимания, функций deque.rotate() и items():
# importing deque from the collections module
from collections import deque
# input dictionary
inputDict = {2: 5, 4: 6, 1: 3, 9: 4, 5: 1}
# printing input dictionary
print("Input Dictionary:", inputDict)
# input K rotations
k = 3
# getting the key, value of dictionary as a tuple
# and converting it into the list
inputDict = list(inputDict.items())
# Converting input dictionary to deque
dequeObject = deque(inputDict)
# rotating the deque object by k rotations
dequeObject.rotate(k)
# converting into the list
resultList = list(dequeObject)
# converting the result list of tuples into a dictionary again
resultantDict = {e[0]: e[1] for e in resultList}
# printing the resultant dictionary after input k rotations
print("Resultant dictionary after", k, "rotations:", resultantDict)
Выход
При выполнении вышеуказанная программа сгенерирует следующий вывод:
Input Dictionary: {2: 5, 4: 6, 1: 3, 9: 4, 5: 1}
Resultant dictionary after 3 rotations: {1: 3, 9: 4, 5: 1, 2: 5, 4: 6}
Заключение
В этой статье мы узнали два разных способа повернуть словарь в K раз. Мы также узнали, как использовать функцию Rotate() для добавления поворота к объекту двухсторонней очереди и как преобразовать данный словарь в двухуровневую очередь.