欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python如何建立多個(gè)值和單個(gè)鍵的映射

 更新時(shí)間:2024年09月11日 08:52:46   作者:TakingCoding4Granted  
在Python中,常見(jiàn)的字典只能映射單個(gè)鍵到單個(gè)值,若需映射單個(gè)鍵到多值,可以通過(guò)將值存儲(chǔ)于列表或集合中實(shí)現(xiàn),使用列表可以保持元素插入順序,而使用集合則可以去重,collections模塊的defaultdict類(lèi)簡(jiǎn)化了此類(lèi)多值字典的創(chuàng)建過(guò)程

問(wèn)題

你希望創(chuàng)建一個(gè)字典,該字典可以建立多個(gè)值和單個(gè)鍵之間的映射(即所謂的多值字典)。

解決方案

在 Python 中,基于普通的字典類(lèi) dict 創(chuàng)建的對(duì)象一般只可以存儲(chǔ)一個(gè)鍵和一個(gè)值的映射。

如果你希望存儲(chǔ)一個(gè)鍵和多個(gè)值之間的映射,你需要將多個(gè)值存儲(chǔ)存儲(chǔ)在另一個(gè)容器中,如:列表或集合。

例如,你可能會(huì)創(chuàng)建如下所示的字典:

d = {
    'a': [1, 2, 3],
    'b': [4, 5],
}

e = {
    'a': {1, 2, 3},
    'b': {4, 5},
}

究竟是使用列表還是集合來(lái)保存多個(gè)值取決于實(shí)際需求,即如果你希望保持元素的插入順序,那么使用列表比較好;如果你希望去除重復(fù)元素且不在乎元素的插入順序,則使用集合更佳。

實(shí)際上,下面將看到,通過(guò)代碼的方式創(chuàng)建上述的字典還是比較麻煩的,需要考慮某個(gè)鍵是否已經(jīng)在字典中,并據(jù)此做不同的處理。

對(duì)此,標(biāo)準(zhǔn)模塊 collections 中的類(lèi) defaultdict 可以使得通過(guò)代碼創(chuàng)建類(lèi)似上述字典變得很容易,使用該類(lèi)創(chuàng)建的對(duì)象中,一個(gè)顯著的特點(diǎn)是,對(duì)于不存在的鍵,在第一次嘗試按照鍵添加值時(shí),該對(duì)象做好自動(dò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}})

討論

如上所述,如果使用普通的字典類(lèi) dict 創(chuàng)建對(duì)象實(shí)現(xiàn)和上述 defaultdict 類(lèi)創(chuàng)建對(duì)象類(lèi)似的功能,那么對(duì)于某個(gè)鍵第一個(gè)值的初始化就會(huì)比較麻煩。

例如,使用 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 ,那么代碼就會(huì)很簡(jiǎn)潔:

>>> d = defaultdict(list)
>>> for key, value in pairs:
...    d[key].append(value)
    
>d
defaultdict(<class 'list'>, {'b': [4, 5], 'a': [1, 2, 3]})

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • python實(shí)現(xiàn)狄克斯特拉算法

    python實(shí)現(xiàn)狄克斯特拉算法

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)狄克斯特拉算法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • Python中的 No Module named ***問(wèn)題及解決

    Python中的 No Module named ***問(wèn)題及解決

    這篇文章主要介紹了Python中的 No Module named ***問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • Python數(shù)據(jù)持久化存儲(chǔ)實(shí)現(xiàn)方法分析

    Python數(shù)據(jù)持久化存儲(chǔ)實(shí)現(xiàn)方法分析

    這篇文章主要介紹了Python數(shù)據(jù)持久化存儲(chǔ)實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了Python基于pymongo及mysql模塊的數(shù)據(jù)持久化存儲(chǔ)操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2019-12-12
  • Python字符串常規(guī)操作小結(jié)

    Python字符串常規(guī)操作小結(jié)

    本文主要介紹了Python字符串常規(guī)操作小結(jié),如拼接字符串、截取字符串、格式化字符串等,下面將對(duì)Python中常用字符串操作方法進(jìn)行介紹,感興趣的可以了解一下
    2022-04-04
  • python中下標(biāo)和切片的使用方法解析

    python中下標(biāo)和切片的使用方法解析

    這篇文章主要介紹了python中下標(biāo)和切片的使用方法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • Python?pandera數(shù)據(jù)驗(yàn)證和清洗的庫(kù)

    Python?pandera數(shù)據(jù)驗(yàn)證和清洗的庫(kù)

    為了確保數(shù)據(jù)的質(zhì)量,Python Pandera 庫(kù)應(yīng)運(yùn)而生。本文將深入介紹 Python Pandera,這是一個(gè)用于數(shù)據(jù)驗(yàn)證和清洗的庫(kù),并提供豐富的示例代碼,幫助大家充分利用它來(lái)提高數(shù)據(jù)質(zhì)量
    2024-01-01
  • 最基礎(chǔ)的Python的socket編程入門(mén)教程

    最基礎(chǔ)的Python的socket編程入門(mén)教程

    這篇文章主要介紹了最基礎(chǔ)的Python的socket編程入門(mén)教程,包括最基本的發(fā)送和接受信息等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • 關(guān)于Python元祖,列表,字典,集合的比較

    關(guān)于Python元祖,列表,字典,集合的比較

    下面小編就為大家?guī)?lái)一篇關(guān)于Python元祖,列表,字典,集合的比較。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-01-01
  • 學(xué)python最電腦配置有要求么

    學(xué)python最電腦配置有要求么

    在本篇內(nèi)容中小編給大家整理的是關(guān)于學(xué)習(xí)python中電腦配置的相關(guān)文章,需要的朋友們可以學(xué)習(xí)下。
    2020-07-07
  • python列表與列表算法詳解

    python列表與列表算法詳解

    這篇文章主要介紹了Python的列表和列表算法,具有一定參考價(jià)值,需要的朋友可以了解下,希望能給你帶來(lái)幫助
    2021-08-08

最新評(píng)論