最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python如何建立多個值和單個鍵的映射

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

問題

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

解決方案

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

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

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

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

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

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

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

對此,標(biāo)準模塊 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)文章

  • linux下安裝python3和對應(yīng)的pip環(huán)境教程詳解

    linux下安裝python3和對應(yīng)的pip環(huán)境教程詳解

    這篇文章主要介紹了linux下安裝python3和對應(yīng)的pip環(huán)境,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-07-07
  • 如何利用pyinstaller打包Python程序為exe可執(zhí)行文件

    如何利用pyinstaller打包Python程序為exe可執(zhí)行文件

    這篇文章主要給大家介紹了關(guān)于如何利用pyinstaller打包Python程序為exe可執(zhí)行文件的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Python標(biāo)準庫之隨機數(shù) (math包、random包)介紹

    Python標(biāo)準庫之隨機數(shù) (math包、random包)介紹

    這篇文章主要介紹了Python標(biāo)準庫之隨機數(shù) (math包、random包)介紹,本文講解了math包的常用函數(shù),同時給出了random包的使用例子,需要的朋友可以參考下
    2014-11-11
  • python多線程互斥鎖與死鎖

    python多線程互斥鎖與死鎖

    這篇文章主要介紹了python多線程互斥鎖與死鎖,多線程間的資源競爭下文我們就以task1(),task2()兩個函數(shù)為例,分別將對全局變量num加一重復(fù)一千萬次循環(huán),具有一定得參考價值,需要的小伙伴可以參考一下
    2022-02-02
  • OpenCV-Python實現(xiàn)油畫效果的實例

    OpenCV-Python實現(xiàn)油畫效果的實例

    OpenCV是功能強大的計算機視覺庫,本文主要使用OpenCV來實現(xiàn)圖片的油畫效果,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-06-06
  • 使用Python協(xié)程實現(xiàn)支持斷點續(xù)傳的文件下載器

    使用Python協(xié)程實現(xiàn)支持斷點續(xù)傳的文件下載器

    協(xié)程是一種多方協(xié)同的工作方式,協(xié)程不是進程或線程,其執(zhí)行過程類似于 Python 函數(shù)調(diào)用,協(xié)程是對使用 async 關(guān)鍵字定義的異步函數(shù)的調(diào)用,本文介紹了如何使用Python協(xié)程實現(xiàn)支持斷點續(xù)傳的文件下載器,需要的朋友可以參考下
    2025-09-09
  • Python 旋轉(zhuǎn)打印各種矩形的方法

    Python 旋轉(zhuǎn)打印各種矩形的方法

    今天小編就為大家分享一篇Python 旋轉(zhuǎn)打印各種矩形的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • python計算圓周率pi的方法

    python計算圓周率pi的方法

    這篇文章主要介紹了python計算圓周率pi的方法,涉及Python針對數(shù)學(xué)運算的相關(guān)技巧,需要的朋友可以參考下
    2015-07-07
  • python通過colorama模塊在控制臺輸出彩色文字的方法

    python通過colorama模塊在控制臺輸出彩色文字的方法

    這篇文章主要介紹了python通過colorama模塊在控制臺輸出彩色文字的方法,實例分析了colorama模塊的功能及相關(guān)使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03
  • Python 多維List創(chuàng)建的問題小結(jié)

    Python 多維List創(chuàng)建的問題小結(jié)

    這篇文章主要介紹了Python 多維List創(chuàng)建的問題小結(jié),詳細的介紹了遇到的一個小問題的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01

最新評論

邵东县| 山丹县| 武邑县| 泰和县| 黄浦区| 富顺县| 鹤山市| 陆川县| 来凤县| 陆川县| 定州市| 莒南县| 突泉县| 广德县| 大竹县| 昔阳县| 越西县| 六枝特区| 南陵县| 延川县| 手游| 建阳市| 宁国市| 杭州市| 金湖县| 海林市| 平泉县| 大田县| 梨树县| 芜湖市| 银川市| 阿合奇县| 瑞昌市| 盐池县| 平远县| 自贡市| 博爱县| 南汇区| 辽宁省| 竹山县| 大连市|