如何使用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}

方法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 表示要處理的鍵值對的數量或字典值的大小。

更新於:2023年8月29日

瀏覽量:159

啟動您的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.