Python 程序用 K 旋转字典

pythonserver side programmingprogramming

Python 实现的数据结构通常称为关联数组,即字典。字典由一组键值对组成。每个键值组合对应一个键及其对应的值。

给定一个包含一些随机键值对的字典,在本文中,我们将学习如何在 Python 中将给定的字典旋转 K 次。

使用的方法

以下是完成此任务的各种方法:

  • 使用列表推导、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

第三次旋转:{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 次后打印结果字典。

示例

以下程序使用列表推导、items() 和字典推导将输入字典旋转给定输入 K 次后返回一个字典 –

# 输入字典
inputDict = {2: 5, 4: 6, 1: 3, 9: 4, 5: 1}
# 打印输入字典
print("输入字典:", inputDict)
# 输入 K 次旋转
k = 3
# 获取字典的键和值作为元组并将其转换为列表
inputDict = list(inputDict.items())
# 将输入字典旋转 k 次
resultList = [inputDict[(p - k) % len(inputDict)] for p, m in enumerate(inputDict)]
# 将结果元组列表再次转换为字典
# 使用字典推导式
resultantDict = {e[0]: e[1] for e in resultList}
# 给定输入 k 后打印结果字典rotations
print("Resultant dictionary after", k, "rotations:", resultantDict)

输出

执行时,上述程序将生成以下输出 –

输入字典:{2: 5, 4: 6, 1: 3, 9: 4, 5: 1}
3 次旋转后的结果字典:{1: 3, 9: 4, 5: 1, 2: 5, 4: 6}

方法 2 使用字典推导、deque.rotate() 和 items() 函数

双端队列,也称为 deque,允许用户从任一端添加和删除项目。Deque 模块属于 collections 库。它提供了可直接使用参数添加和删除项目的方法。

当我们需要从容器的两端更快地执行附加和弹出操作时,会选择双端队列而不是列表,因为双端队列为附加和弹出操作提供了O(1)时间复杂度,而列表提供了O(n)时间复杂度。

deque.rotate() 函数 - 使用此函数将双端队列按参数中给出的数字旋转。如果给定的数字为负数,则旋转向左进行。如果不是,则旋转将向右进行。

算法(步骤)

以下是执行所需任务所要遵循的算法/步骤 -。

  • 使用 import 关键字从 collections 模块导入双端队列。

  • 使用 items() 函数获取字典的键和值对。

  • 使用 list() 函数将其转换为元组列表(将序列/可迭代对象转换为列表)

  • 使用 deque() 函数,将输入字典作为参数传递给该函数,将字典转换为双端队列。

  • 使用 rotate() 函数,将输入的 k 值传递给该函数,并将其应用于双端队列,以将输入字典旋转 k 次。

  • 使用 list() 函数(返回可迭代对象的列表)将结果转换为列表。

  • 再次使用字典将结果元组列表转换为字典理解。

  • 将字典旋转 k 次后打印结果字典。

示例

以下程序使用字典理解、deque.rotate() 和 items() 函数将输入字典旋转给定的 K 次旋转后返回一个字典——

# 从 collections 模块导入 deque
from collections import deque
# 输入字典
inputDict = {2: 5, 4: 6, 1: 3, 9: 4, 5: 1}
# 打印输入字典
print("Input Dictionary:", inputDict)
# 输入 K 次旋转
k = 3
# 获取字典的键、值作为元组
# 并将其转换为列表
inputDict = list(inputDict.items())
# 将输入字典转换为 deque
dequeObject = deque(inputDict)
# 将 deque 对象旋转 k 次
dequeObject.rotate(k)
# 转换为列表
resultList = list(dequeObject)
# 将结果元组列表再次转换为字典
resultantDict = {e[0]: e[1] for e in resultList}
# 打印输入 k 次旋转后的结果字典
print("结果字典之后", k, "rotations:", resultantDict)

输出

执行时,上述程序将生成以下输出 –

输入字典:{2: 5, 4: 6, 1: 3, 9: 4, 5: 1}
3 次旋转后的结果字典:{1: 3, 9: 4, 5: 1, 2: 5, 4: 6}

结论

在本文中,我们学习了两种不同的方法将字典旋转 K 次。我们还学习了如何使用 rotate() 函数将旋转添加到双端队列对象以及如何将给定的字典转换为双端队列。


相关文章