在 Python 字典中,一個鍵可以儲存多個值嗎?


什麼是 Python 字典?

字典是 Python 自身對資料結構的原生表示,可以認為類似於 C++ 中的 map。它是一個動態資料結構,動態儲存鍵值對,並且是可變的。可以更好地將其理解為關聯陣列,其中每個元素都與其鍵值相關聯。

一個鍵可以儲存多個值嗎?

雖然 Python 中的字典以鍵值對的形式儲存值,但可以為字典中的同一個鍵儲存多個值。這是透過將容器(如列表、集合和元組)設定為字典中每個鍵的值物件來實現的。在本文中,我們將主要關注

為每個鍵建立具有多個值的字典的步驟

  • 顯式宣告列表

  • 使用 extend() 函式新增值

  • 使用 append() 函式將子列表新增到列表

  • 使用 setdefault() 方法新增值

  • 使用 defaultdict() 新增元組

方法 1:顯式宣告列表

我們可以顯式宣告一個包含多個元素的列表,並將其分配給一個鍵。詳細過程包括用包含單個值的列表初始化鍵,然後使用賦值運算子更新列表。

語法

dictionary_name = {'key': ['first_value'],
dictionary_name[‘key'] += ['value_added']

在這裡,我們將值新增到最初對映為字典特定鍵的值的列表中(在第一個語句中初始化)。可以透過簡單地使用賦值運算子來向列表中新增元素,類似於將字串連線在一起,如第二個語句所示。

演算法

步驟 1 - 建立字典並用單元素列表初始化鍵

步驟 2 - 將較新的元素新增到連線到要對映多個值的鍵的列表中

步驟 3 - 列印或對資料執行進一步必要的操作

示例

shop = {'available': ['bread'], 'not available': ['eggs'], 'excess': ['milk']}
print(f'shop list: \n{shop}')
shop['available'] += ['fish']
shop['available'] += ['another fish', 'and another fish']
print(f'shop list: \n{shop}') 

輸出

shop list:
{'available': ['bread'], 'not available': ['eggs'], 'excess': ['milk']}
shop list:
{'available': ['bread', 'fish', 'another fish', 'and another fish'], 'not available': ['eggs'], 'excess': ['milk']}

方法 2:使用 extend() 函式新增值

extend() 方法可以與賦值運算子完全相似地使用,以將值新增到特定鍵元素。我們不是使用“+=”與鍵一起使用,而是向鍵新增.extend()函式,該函式將值新增到對映到鍵的列表中。

語法

dictionary_name['key'].extend(['new_listvalue'])

在這裡我們可以看到,extend() 方法被呼叫到字典的特定鍵值上。extend() 函式只接受一個引數,因此一次只能向列表新增一個值。如果我們新增一個逗號分隔的值列表,直譯器將返回 TypeError。

演算法

步驟 1 - 建立字典

步驟 2 - 用單值列表初始化鍵

步驟 3 - 擴充套件列表並將更多值新增到特定鍵元素

示例

shop = {'available': ['bread'], 'not available': ['eggs'], 'excess': ['milk']}
print(f'shop list: \n{shop}')
shop['available'].extend(['fish'])
shop['available'].extend(['another fish', 'and another fish'])
print(f'shop list: \n{shop}')

輸出

shop list:
{'available': ['bread'], 'not available': ['eggs'], 'excess': ['milk']}
shop list:
{'available': ['bread', 'fish', 'another fish', 'and another fish'], 'not available': ['eggs'], 'excess': ['milk']} 

方法 3:使用 append() 函式將子列表新增到列表

與前面使用的賦值運算子或 extend() 方法不同,append() 方法的工作方式略有不同。此函式不是將值新增到字典中現有的對映列表中,而是在該對映列表中建立子列表並將值儲存在其中。因此,它可以被認為是一種指數方法,其中列表的維度在每次插入操作後都會增加。此方法的可用性取決於我們的當前應用程式是否需要這種深度,因為它也存在缺點,即複雜性會迅速增加。

語法

dictionary_name['key'].append(['value1'])

語法類似於 extend() 方法,這就是為什麼這兩種方法乍一看工作方式非常相似的原因。append() 函式在所需的字典鍵上呼叫,並傳遞列表中的值。在這裡,也只允許向 append() 函式傳遞單個引數,如果我們傳遞逗號分隔的子列表列表,它將顯示 TypeError。

演算法

步驟 1 - 建立字典

步驟 2 - 用單值列表初始化鍵

步驟 3 - 呼叫 append() 函式將包含值的子列表傳遞給特定鍵

步驟 4 - 為了訪問各個子列表,我們使用主列表和相應子列表的索引

示例

shop = {'available': ['bread'], 'not available': ['eggs'], 'excess': ['milk']}
print(f'shop list: \n{shop}')
shop['available'].append(['fish'])
print(f'shop list: \n{shop}')
print(shop['available'][1][0])

輸出

shop list: 
{'available': ['bread'], 'not available': ['eggs'], 'excess': ['milk']}
shop list: 
{'available': ['bread', ['fish']], 'not available': ['eggs'], 'excess': ['milk']}
fish

方法 4:使用 setdefault() 方法新增值

在此方法中,我們使用setdefault()方法向鍵新增多個值。如果字典中已經存在特定鍵,則此函式會將傳遞給鍵的值新增進去。否則,將建立一個包含新值作為預設值的新鍵。然後我們可以使用 extend() 等方法向特定鍵的現有值新增新值。

語法

shop.setdefault('restocked', []).extend(['apples', 'oranges'])

在這裡,我們向 setdefault() 函式傳遞兩個引數,因為我們不知道指定的鍵是否已存在於字典中。如果我們確定鍵存在,則可以忽略第二個引數(空列表)。然後,我們使用 extend() 函式新增將在與鍵配對的列表中新增的值。

演算法

步驟 1 - 建立字典

步驟 2 - 用單值列表初始化鍵

步驟 3 - 呼叫 setdefault() 函式將新值傳遞給特定鍵,無論它是否已存在

步驟 4 - 使用 extend() 函式新增更多值

示例

shop = {'available': ['bread'], 'not available': ['eggs'], 'excess': ['milk']}
print(f'shop list: \n{shop}')
shop.setdefault('restocked', []).extend(['apples', 'oranges'])
print(f'shop list: \n{shop}') 

輸出

shop list:
{'available': ['bread'], 'not available': ['eggs'], 'excess': ['milk']}
shop list:
{'available': ['bread'], 'not available': ['eggs'], 'excess': ['milk'], 'restocked': ['apples', 'oranges']} 

方法 5:使用 defaultdict() 新增元組

這是我們將要討論的唯一一種使用元組而不是列表的方法。由於元組是不可變的,因此我們無法將值單獨推入與鍵連結的元組中。在這裡,defaultdict() 函式可以提供幫助,它是 dict 類的子類。我們使用元組分配鍵值對,如果鍵已經存在,則將值新增到現有列表中。

語法

shop_dict = defaultdict(list)

在這裡,defaultdict() 函式將元組轉換為鍵值對,並用它們初始化字典。然後使用上面使用的任何方法新增多個值。

演算法

步驟 1 - 建立字典並匯入 defaultdict() 類

步驟 2 - 使用 defaultdict() 函式用元組初始化鍵值對

步驟 3 - 使用 extend() 函式或上面描述的其他方法新增更多值

示例

from collections import defaultdict
shop=[("shop1","bread"),("shop2","milk"),("shop3","chips")]
shop_dict = defaultdict(list)
for key, value in shop:
   {shop_dict[key].append(value)} 
shop_dict['shop1'].extend(['coke','biscuits'])
print(f'shop list: \n'+str(dict(shop_dict))) 

輸出

shop list: 
{'shop1': ['bread', 'coke', 'biscuits'], 'shop2': ['milk'], 'shop3': ['chips']} 

結論

因此,我們在本文中推斷出,在 Python 字典中,單個鍵可以具有多個值。我們還介紹了向 Python 字典中的單個鍵新增多個值的常用方法。還有幾種其他方法可以向鍵新增值,稍後可以詳細探討。希望本文對您來說是一次很好的學習體驗!

更新於:2023年3月24日

44K+ 次瀏覽

開啟您的職業生涯

完成課程獲得認證

開始
廣告
© . All rights reserved.