如何使用 Python 将字典值转换为绝对值?

pythonserver side programmingprogramming

字典是可以包含任何数据类型的键和值的数据结构。值也可以是整数类型。在本文中,我们将了解如何使用 Python 将字典值转换为绝对值,这意味着如果一个值为负数,它将被转换为绝对值或正值,而正值将保持原样。

I/O 示例

输入 = {'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}

方法 3:使用 map() 和 lambda 函数

Python 包含一个 map() 函数,该函数允许我们将给定函数应用(或映射)到可迭代对象的每个元素,然后返回由结果组成的迭代器。它需要 2 个参数:要应用的函数;要操作的可迭代对象。

与 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})
# 将 abs() 函数应用于"values"列。
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 表示正在处理的键值对的数量或字典值的大小。


相关文章