如何在Python 3中使用列表作為字典鍵?


字典是Python程式語言中最強大的資料結構之一。這是一種由鍵值對組成的資料結構。它有幾個優點;例如,訪問值的時間複雜度為O(1),它記憶體效率高,易於更新、刪除和迭代,並提供許多內建函式以進行快速操作。

直接使用列表時遇到的問題

我們關注這個主題是因為當我們嘗試將列表作為鍵時會遇到問題。列表是Python中的可變資料型別。因此,我們可以刪除、更新和追加列表中的值。因此,如果我們從列表生成雜湊函式,並且列表的項發生更改,那麼我們可能無法再找到雜湊函式,因為雜湊函式現在已更改。

另一個潛在問題是不同的列表可能具有相同的雜湊值。如果兩個列表的值之和相同,則它們的雜湊值將相同。在這種情況下,如果其中一個列表用作字典中的鍵,並且搜尋另一個具有相同雜湊值的列表,則字典可能會給出不正確的結果。

將列表轉換為元組

將列表作為字典鍵的一種方法是將其轉換為元組,然後將其用作鍵。請注意,這是間接方法。儘管值不變,但資料型別不再是列表。

語法

<variable name> = tuple(<list to convert into tuple>)

這裡元組接受一個引數,即列表的名稱。

示例

在下面的程式碼中,我們首先建立了一個名為my_dict的空字典。接下來,我們建立了名為my_list的列表。我們使用元組方法將列表轉換為元組物件。我們現在使用元組物件作為鍵,使用字串“hello, world!”作為值。

my_dict = {}
my_list = [1, 2, 3]
my_tuple = tuple(my_list)
my_dict[my_tuple] = "Hello, World!"
print(my_dict)

輸出

{(1, 2, 3): 'Hello, World!'}

將列表轉換為字串

另一種方法是將列表轉換為字串資料型別。字串也是不可變的資料型別;因此,我們可以將其用作字典的鍵。

語法

<variable name> = ''.join(str(e) for e in <name of the list>)

此語句從列表中獲取各個元素並從中建立一個字串。join函式連線字串序列。

示例

在下面的程式碼中,我們首先建立了一個名為my_list的列表。接下來,我們使用了join方法,該方法建立了列表元素的字串。由於字串可以用作字典鍵,因此我們將其用作字典my_list_str的鍵。

my_list = [1, 2, 3]
my_list_str = ''.join(str(e) for e in my_list)
my_dict = {my_list_str: 'value'}
print(my_dict)
print(my_dict[my_list_str])

輸出

{'123': 'value'}
value

將列表轉換為JSON

我們還可以使用JSON模組和內建函式,首先使用dumps方法將列表轉換為字串,然後將其用作字典的鍵。

語法

<name of variable< = json.dumps(<name of list<)

這裡JSON庫的dumps方法將Python物件序列化為JSON格式的字串。dumps方法將字串的名稱作為引數。

示例

在下面的程式碼中,我們首先匯入了JSON庫。接下來,我們建立了一個名為my_list的列表。我們使用dumps方法從列表建立序列化物件。現在我們使用序列化物件作為字典鍵- my_dict。

import json
my_list = [1, 2, 3]
my_key = json.dumps(my_list)
my_dict = {my_key: 'value'}
print(my_dict)

輸出

{'[1, 2, 3]': 'value'}

結論

在本文中,我們學習瞭如何在Python 3中使用列表作為字典的鍵。我們瞭解瞭如果直接嘗試將列表作為Python字典中的鍵將會遇到的困難。因此,我們需要首先將列表資料型別轉換為元組、字串等不可變資料型別。我們還學習瞭如何使用JSON模組將列表用作字典鍵。

更新於:2023年7月28日

瀏覽量:112

啟動您的職業生涯

透過完成課程獲得認證

開始
廣告
© . All rights reserved.