在 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 字典中的單個鍵新增多個值的常用方法。還有幾種其他方法可以向鍵新增值,稍後可以詳細探討。希望本文對您來說是一次很好的學習體驗!
資料結構
網路
關係型資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP