Python如何建立多個值和單個鍵的映射
問題
你希望創(chuàng)建一個字典,該字典可以建立多個值和單個鍵之間的映射(即所謂的多值字典)。
解決方案
在 Python 中,基于普通的字典類 dict
創(chuàng)建的對象一般只可以存儲一個鍵和一個值的映射。
如果你希望存儲一個鍵和多個值之間的映射,你需要將多個值存儲存儲在另一個容器中,如:列表或集合。
例如,你可能會創(chuàng)建如下所示的字典:
d = { 'a': [1, 2, 3], 'b': [4, 5], } e = { 'a': {1, 2, 3}, 'b': {4, 5}, }
究竟是使用列表還是集合來保存多個值取決于實際需求,即如果你希望保持元素的插入順序,那么使用列表比較好;如果你希望去除重復元素且不在乎元素的插入順序,則使用集合更佳。
實際上,下面將看到,通過代碼的方式創(chuàng)建上述的字典還是比較麻煩的,需要考慮某個鍵是否已經(jīng)在字典中,并據(jù)此做不同的處理。
對此,標準模塊 collections
中的類 defaultdict
可以使得通過代碼創(chuàng)建類似上述字典變得很容易,使用該類創(chuàng)建的對象中,一個顯著的特點是,對于不存在的鍵,在第一次嘗試按照鍵添加值時,該對象做好自動的做好值的初始化。
例如:
>>> from collections import defaultdict >>> d = defaultdict(list) >>> d defaultdict(<class 'list'>, {}) >>> d['a'] [] >>> d defaultdict(<class 'list'>, {'a': []}) >>> d = defaultdict(list) >>> d['a'].append(1) >>> d['a'].append(2) >>> d['b'].append(4) >>> d defaultdict(<class 'list'>, {'a': [1, 2], 'b': [4]}) >>> d = defaultdict(set) >>> d['a'].add(1) >>> d['a'].add(2) >>> d['b'].add(4) >>> d defaultdict(<class 'set'>, {'a': {1, 2}, 'b': {4}})
討論
如上所述,如果使用普通的字典類 dict
創(chuàng)建對象實現(xiàn)和上述 defaultdict
類創(chuàng)建對象類似的功能,那么對于某個鍵第一個值的初始化就會比較麻煩。
例如,使用 dict
的初始化可能如下:
>>> pairs >>> [('a', 1), ('a', 2), ('a', 3), ('b', 4), ('b', 5)] >>> d = {} >>> for key, value in pairs: ... if key not in d: ... d[key] = [] ... d[key].append(value) >>> d {'a': [1, 2, 3], 'b': [4, 5]}
如果使用 defaultdict
,那么代碼就會很簡潔:
>>> d = defaultdict(list) >>> for key, value in pairs: ... d[key].append(value) >d defaultdict(<class 'list'>, {'b': [4, 5], 'a': [1, 2, 3]})
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python中的 No Module named ***問題及解決
這篇文章主要介紹了Python中的 No Module named ***問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07Python數(shù)據(jù)持久化存儲實現(xiàn)方法分析
這篇文章主要介紹了Python數(shù)據(jù)持久化存儲實現(xiàn)方法,結(jié)合實例形式分析了Python基于pymongo及mysql模塊的數(shù)據(jù)持久化存儲操作相關(guān)實現(xiàn)技巧,需要的朋友可以參考下2019-12-12Python?pandera數(shù)據(jù)驗證和清洗的庫
為了確保數(shù)據(jù)的質(zhì)量,Python Pandera 庫應運而生。本文將深入介紹 Python Pandera,這是一個用于數(shù)據(jù)驗證和清洗的庫,并提供豐富的示例代碼,幫助大家充分利用它來提高數(shù)據(jù)質(zhì)量2024-01-01