如何使用Python将字典值转换为绝对值?
字典是数据结构,可以包含任何数据类型的键和值。值也可以是整数类型。在本文中,我们将学习如何使用Python将字典值转换为绝对值,这意味着如果值为负数,则将其转换为绝对值或正值;而正值将保持不变。
输入/输出示例
输入 = {'a':1 , 'b' : -1}
输出 = {'a':1 , 'b' : 1}
要进行此转换,有很多技术,但是其中大多数技术都会用到一个函数:`abs()` 函数。它是内置函数,返回提供给它的数字的绝对值,也可以认为它是一个计算数值大小的函数,而不管其符号如何。
`abs()` 函数基本上接受单个参数,该参数可以是整数、浮点数或复数。它返回输入参数的绝对值。如果输入是实数(整数或浮点数),则该函数返回其正值。如果输入是复数,则该函数返回其大小,即在复平面中到原点 (0, 0) 的距离。
方法1:循环和更新(朴素方法)
此方法简单地迭代整个字典,并对每个值应用 `abs()` 函数。值是使用键访问和设置的。
示例
my_dict = {'x': -11, 'y': 7, 'e': -82, 't': 42, 'r': -175} for key in my_dict: my_dict[key] = abs(my_dict[key]) print(my_dict)
输出
{'x': 11, 'y': 7, 'e': 82, 't': 42, 'r': 175}
方法2:字典推导式
Python 的字典推导式为我们提供了一种简单的方法,可以用最少的语法复杂性快速创建字典。此构造通过迭代可迭代对象并使用直观的表达式分配键和值来生成新的字典,从而提高可读性,同时减少显式循环以及额外的代码行。
示例
my_dict = {'x': -11, 'y': 7, 'e': -82, 't': 42, 'r': -175} abs_dict = {key: abs(value) for key, value in my_dict.items()} print(abs_dict)
输出
{'x': 11, 'y': 7, 'e': 82, 't': 42, 'r': 175}
Learn Python in-depth with real-world projects through our Python certification course. Enroll and become a certified expert to boost your career.
方法3:使用 `map()` 和 lambda 函数
Python 包含一个 `map()` 函数,它允许我们将给定函数应用(或映射)到可迭代对象的每个元素,然后返回包含结果的迭代器。它接受两个参数:要应用的函数;要操作的可迭代对象。
结合 lambda 函数(即动态定义的匿名函数),`map()` 成为对可迭代对象元素执行简单操作的强大工具。当需要短期使用函数或将其作为参数传递给高阶函数(如 `map()`)时,通常使用 lambda 函数。
示例
my_dict = {'x': -11, 'y': 7, 'e': -82, 't': 42, 'r': -175} abs_dict = {key: abs(value) for key, value in map(lambda item: (item[0], item[1]), my_dict.items())} print(abs_dict)
输出
{'x': 11, 'y': 7, 'e': 82, 't': 42, 'r': 175}
方法4:使用 `dict()` 构造函数和推导式
Python 的内置字典构造函数 `dict()` 可以从各种形式的输入(如可迭代对象、键值对甚至现有字典)快速有效地创建新的字典对象。
结合字典推导式,可以轻松地使用可迭代对象或其他数据源创建字典。有了这个灵活的工具,`dict()` 构造函数成为一种有效的工具,可以根据可迭代对象或其他数据源生成具有精确键/值对的键值映射字典。
示例
my_dict = {'x': -11, 'y': 7, 'e': -82, 't': 42, 'r': -175} abs_dict = dict((key, abs(value)) for key, value in my_dict.items()) print(abs_dict)
输出
{'x': 11, 'y': 7, 'e': 82, 't': 42, 'r': 175}
方法5:使用 for 循环和字典推导式
下面提供的代码说明了如何创建一个名为“my_dict”的字典,其中包含多个键值对。字典推导式允许迭代这些键以生成另一个名为“abs_dict”的字典,其中每个键都对应于“my_dict”中相应值的绝对值(通过 `abs()` 函数)。运行后,“abs_dict”显示相同,但使用转换后的绝对值。代码最后打印出这个第二个版本,它仍然保持相同的键,但值已转换为其绝对值!
示例
my_dict = {'x': -11, 'y': 7, 'e': -82, 't': 42, 'r': -175} abs_dict = {key: abs(my_dict[key]) for key in my_dict} print(abs_dict)
输出
{'x': 11, 'y': 7, 'e': 82, 't': 42, 'r': 175}
方法6:使用带 `update()` 方法的字典推导式
字典推导式结合更新函数可以创建一个有效的解决方案。在创建名为“my_dict”的字典后,字典推导式将添加所有键,并将它们的值相应地更新为它们的绝对值。
示例
my_dict = {'x': -11, 'y': 7, 'e': -82, 't': 42, 'r': -175} abs_dict = {} abs_dict.update({key: abs(value) for key, value in my_dict.items()}) print(abs_dict)
输出
{'x': 11, 'y': 7, 'e': 82, 't': 42, 'r': 175}
方法7:使用 NumPy
Python 常用的 NumPy 库为我们提供了许多函数。但是,在这种情况下,一个非常有用的函数是 `numpy.abs()`。这允许我们计算类似数组对象内部数值元素的绝对值。它将数组或任何标量作为输入,然后返回包含相应元素绝对值的数组/标量。
示例
import numpy as np my_dict = {'x': -11, 'y': 7, 'e': -82, 't': 42, 'r': -175} abs_dict = {key: np.abs(value) for key, value in my_dict.items()} print(abs_dict)
输出
{'x': 11, 'y': 7, 'e': 82, 't': 42, 'r': 175}
方法8:使用 Pandas
Pandas 就像 NumPy 一样,是另一个数据处理和操作库。我们在这里从所有字典值创建一个 Pandas 数据框,并创建一个新列,我们将其称为 `abs_values`。然后,我们将 `abs()` 函数应用于包含值的初始列。应用 `abs()` 后的新值存储在 `abs_values` 列中,然后使用 `to_dict()` 函数转换回字典。
示例
import pandas as pd my_dict = {'x': -11, 'y': 7, 'e': -82, 't': 42, 'r': -175} df = pd.DataFrame({'values': my_dict}) # Apply the abs() function to the 'values' column. df['abs_values'] = df['values'].abs() abs_dict = df['abs_values'].to_dict() print(abs_dict)
输出
{'e': 82, 'r': 175, 't': 42, 'x': 11, 'y': 7}
结论
Python 中有多种方法可以将字典值转换为绝对值。大多数方法都使用了 `abs()` 函数。这些方法包括使用循环、字典推导式、`map` 和 lambda、`dict` 构造函数、带字典推导式的循环、带 `update()` 的字典推导式、NumPy 库以及最后的 Pandas 库。
总共演示了 8 种方法,其中大多数方法具有相同的 `O(N)` 时间复杂度,其中 N 表示要处理的键值对的数量或字典值的大小。