Python基礎-06字典

来源:https://www.cnblogs.com/surpassme/archive/2020/05/25/12961610.html
-Advertisement-
Play Games

6.字典 字典的主要特性如下所示: 1.字典是使用大括弧進行定義 2.字典中的元素是鍵值對的形式出現,每個鍵值對之間使用冒號進行分隔,每個元素間使用逗號進行分隔 3.字典中鍵必須為不可更改的數據類型,如整型數據、浮點數據、布爾型、字元型、元組等,但不能列表和變數 6.1 基本使用 1.添加 直接給對 ...


6.字典

    字典的主要特性如下所示:

  • 1.字典是使用大括弧進行定義
  • 2.字典中的元素是鍵值對的形式出現,每個鍵值對之間使用冒號進行分隔,每個元素間使用逗號進行分隔
  • 3.字典中鍵必須為不可更改的數據類型,如整型數據、浮點數據、布爾型、字元型、元組等,但不能列表和變數

6.1 基本使用

1.添加

    直接給對應的鍵賦值即可

d={}
d["a"]=123
# 輸出結果
{'a': 123}

2.獲取

    直接填寫對應的鍵即可,但必須保證鍵存在

d={'a': 123}
d["a"]
# 輸出結果
123

3.更新
    與添加類似,重新賦值的過程便是更新

d={'a': 123}
d["a"]=456
d
# 輸出結果
{'a': 456}

4.刪除
    使用del,後面填寫相應的鍵即可

d={'a': 123}
del d["a"]
d
# 輸出結果
{}

6.2基本方法

    字典中常用的方法為三個:

  • keys():獲取字典的鍵
  • values():獲取字典的值
  • items():獲取字典的元素,即鍵值對

    示例代碼如下所示:

d={
    "beijing":"beijing",
    "shanghai":"shanghai",
    "jiangsu":"nanjing",
    "zhejian":"hangzhou",
    "hubei":"wuhai",
}

print(f"獲取字典的鍵:{d.keys()}")
print(f"獲取字典的值:{d.values()}")
print(f"獲取字典的鍵值對:{d.items()}")

輸出結果如下所示:

獲取字典的鍵:dict_keys(['beijing', 'shanghai', 'jiangsu', 'zhejian', 'hubei'])
獲取字典的值:dict_values(['beijing', 'shanghai', 'nanjing', 'hangzhou', 'wuhai'])
獲取字典的鍵值對:dict_items([('beijing', 'beijing'), ('shanghai', 'shanghai'), ('jiangsu', 'nanjing'), ('zhejian', 'hangzhou'), ('hubei', 'wuhai')])

6.3常用方法

  • clear():清空字典中元素
  • get():獲取指定鍵的值,如果未找到對應的鍵,則返回get指定的預設值,如果未指定預設值,則為None
  • setdefault():與get類似,區別在於如果給定的鍵不在字典,則進行添加鍵,其值為指定的值,未指定則預設為None,如果鍵存在,則不做任何操作
  • update():向字典中添加字典
  • pop():刪除指定鍵值對
  • popitem():刪除字典中最後的鍵值對,並返回刪除的鍵值對元組形式
  • fromkeys():創建一個新字典,從指定的可迭代對象獲取對應的鍵,值為字典對應的初始值,常為None

    示例代碼如下所示:

a=(1,2,3,4,5)

d={
    "beijing":"beijing",
    "shanghai":"shanghai",
    "jiangsu":"nanjing",
    "zhejian":"hangzhou",
    "hubei":"wuhai",
}

ad={
    "abc":122,
    "def":123
}
print(f"使用get方法獲取指定鍵(存在)的值:{d.get('beijing','Test')}")
print(f"使用get方法獲取指定鍵(不存在)的值:{d.get('surpass','Test')}")
d.setdefault('beijing','beijingTest')
print(f"使用setdefault方法獲取指定鍵(存在)的值:{d}")
d.setdefault('surpass','Test')
print(f"使用setdefault方法獲取指定鍵(不存在)的值:{d}")
d.update(ad)
print(f"使用update在字典添加字典:{d}")
d.pop("abc")
print(f"使用pop刪除指定鍵的值:{d}")
tmp=d.popitem()
print(f"使用pop刪除指定鍵的值:{d} 刪除的元素為:{tmp}")
d1=dict.fromkeys(a)
print(f"使用fromkeys創建新的字典,並將可迭代元素的值做為鍵,其對應的值為初始值:{d1}")
d2=dict.fromkeys(a,100)
print(f"使用fromkeys創建新的字典,並將可迭代元素的值做為鍵,其對應的值為初始值:{d2}")

輸出結果如下所示:

使用get方法獲取指定鍵(存在)的值:beijing
使用get方法獲取指定鍵(不存在)的值:Test
使用setdefault方法獲取指定鍵(存在)的值:{'beijing': 'beijing', 'shanghai': 'shanghai', 'jiangsu': 'nanjing', 'zhejian': 'hangzhou', 'hubei': 'wuhai'}
使用setdefault方法獲取指定鍵(不存在)的值:{'beijing': 'beijing', 'shanghai': 'shanghai', 'jiangsu': 'nanjing', 'zhejian': 'hangzhou', 'hubei': 'wuhai', 'surpass': 'Test'}
使用update在字典添加字典:{'beijing': 'beijing', 'shanghai': 'shanghai', 'jiangsu': 'nanjing', 'zhejian': 'hangzhou', 'hubei': 'wuhai', 'surpass': 'Test', 'abc': 122, 'def': 123}
使用pop刪除指定鍵的值:{'beijing': 'beijing', 'shanghai': 'shanghai', 'jiangsu': 'nanjing', 'zhejian': 'hangzhou', 'hubei': 'wuhai', 'surpass': 'Test', 'def': 123}
使用pop刪除指定鍵的值:{'beijing': 'beijing', 'shanghai': 'shanghai', 'jiangsu': 'nanjing', 'zhejian': 'hangzhou', 'hubei': 'wuhai', 'surpass': 'Test'} 刪除的元素為:('def', 123)
使用fromkeys創建新的字典,並將可迭代元素的值做為鍵,其對應的值為初始值:{1: None, 2: None, 3: None, 4: None, 5: None}
使用fromkeys創建新的字典,並將可迭代元素的值做為鍵,其對應的值為初始值:{1: 100, 2: 100, 3: 100, 4: 100, 5: 100}

6.4 字典鍵確定方法

    因為字典的鍵是不可更改的,那如何判斷一個數據類型是否可更改呢?兩種方法如下所示:

  • 使用id()方法:對一個數據類型進行一些操作,比較前後兩個id()出來的結果是否一樣,一樣則代表可更改,不一樣,則代表不可更改。
  • 使用hash()方法:使用hash()方法後,如果不報錯,則表明可以被hash,即不可更改,否則則可更改
s="abc"
id(s)
# 輸出結果
1536614318320
s+="aa"
id(s)
# 輸出結果
1536635062128
import hashlib
hash("123")
# 輸出結果
-7084025808549728804
hash(["123"])
# 輸出結果
Traceback (most recent call last):
  File "<input>", line 1, in <module>
TypeError: unhashable type: 'list'

    以上示例表明字元是可以被hash的,可以做為字典的鍵,但列表卻不行。

6.5 優缺點

  • 優點:查找和插入速度快
  • 缺點:記憶體占用較大

本文同步在微信訂閱號上發佈,如各位小伙伴們喜歡我的文章,也可以關註我的微信訂閱號:woaitest,或掃描下麵的二維碼添加關註:
MyQRCode.jpg


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、基本概念 裝飾模式又名包裝(Wrapper)模式。裝飾模式以對客戶端透明的方式擴展對象的功能,是繼承關係的一個替代方案。 二、通俗解釋 DECORATOR裝飾模式:Mary過完輪到Sarly過生日,還是不要叫她自己挑了,不然這個月伙食費肯定玩完,拿出我去年在華山頂上照的照片,在背面寫上“最好的的 ...
  • 一、基本概念 合成模式屬於對象的結構模式,有時又叫做“部分——整體”模式。合成模式將對象組織到樹結構中,可以用來描述整體與部分的關係。合成模式可以使客戶端將單純元素與複合元素同等看待。 二、通俗解釋 COMPOSITE合成模式:Mary今天過生日。“我過生日,你要送我一件禮物。”“嗯,好吧,去商店, ...
  • 一、基本概念 橋梁模式(Bridge)是對象的結構模式。又稱為柄體(Handle and Body)模式或介面(Interface)模式。橋梁模式的用意是“將抽象化(Abstraction)與實現化(Implementation)脫耦,使得二者可以獨立地變化”。 這句話有三個關鍵詞,也就是抽象化、實 ...
  • 一、基本概念 適配器模式是將某個類的介面轉換成客戶端期望的另一個介面表示,目的是消除由於介面不匹配所造成的的類的相容性問題。 二、通俗解釋 ADAPTER 適配器模式:在朋友聚會上碰到了一個美女Sarah,從香港來的,可我不會說粵語,她不會說普通話,只好求助於我的朋友kent了,他作為我和Sarah ...
  • 我們在使用Spring框架中,特別是框架級的功能,經常看到有@Import導入功能, ​ 我就介紹下它能導入什麼,首先聲明下@Import是註解,導入類型可分為三類: 1. 導入配置 @Configuration,類似於spring早期版本2.5的import xml文件一樣, <?xml vers ...
  • 一、不同環境下的C 1.一個源程式inform.c編譯生成a.out,然後可以直接運行這個可執行程式,如果要存儲這個可執行文件,應該把它重命名,否則,就會被下一次編譯程式時生成的新a.out所替換。 2.如何處理目標代碼,C編譯器會創建一個inform.o,然而卻找不到這個文件,因為一旦鏈接器生成了 ...
  • @ 一、類的載入概述 載入 就是指將class文件讀入記憶體,併為之創建一個Class對象 任何類被使用時系統都會建立一個Class對象 連接 驗證:是否有正確的內部結構,並和其他類協調一致 準備:負責為類的靜態成員分配記憶體,並設置預設初始化值 解析:將類的二進位數據中的符號引用替換為直接引用 初始化 ...
  • cola擴展點使用和設計初探 封裝變化,可靈活應對程式的需求變化。 擴展點使用 步驟: 定義擴展點介面,類型可以是校驗器,轉換器,實體; 必須以ExtPt結尾,表示一個擴展點。 比如,我定義一個雲樞的組織結構的擴展點介面,消息發送擴展點,二開擴展點,webapi的rest介面擴展點點。 定義擴展點接 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 插件化的需求主要源於對軟體架構靈活性的追求,特別是在開發大型、複雜或需要不斷更新的軟體系統時,插件化可以提高軟體系統的可擴展性、可定製性、隔離性、安全性、可維護性、模塊化、易於升級和更新以及支持第三方開發等方面的能力,從而滿足不斷變化的業務需求和技術挑戰。 一、插件化探索 在WPF中我們想要開 ...
  • 歡迎ReaLTaiizor是一個用戶友好的、以設計為中心的.NET WinForms項目控制項庫,包含廣泛的組件。您可以使用不同的主題選項對項目進行個性化設置,並自定義用戶控制項,以使您的應用程式更加專業。 項目地址:https://github.com/Taiizor/ReaLTaiizor 步驟1: ...
  • EDP是一套集組織架構,許可權框架【功能許可權,操作許可權,數據訪問許可權,WebApi許可權】,自動化日誌,動態Interface,WebApi管理等基礎功能於一體的,基於.net的企業應用開發框架。通過友好的編碼方式實現數據行、列許可權的管控。 ...
  • Channel 是乾什麼的 The System.Threading.Channels namespace provides a set of synchronization data structures for passing data between producers and consume ...
  • efcore如何優雅的實現按年分庫按月分表 介紹 本文ShardinfCore版本 本期主角: ShardingCore 一款ef-core下高性能、輕量級針對分表分庫讀寫分離的解決方案,具有零依賴、零學習成本、零業務代碼入侵適配 距離上次發文.net相關的已經有很久了,期間一直在從事java相關的 ...
  • 前言 Spacesniffer 是一個免費的文件掃描工具,通過使用樹狀圖可視化佈局,可以立即瞭解大文件夾的位置,幫助用戶處理找到這些文件夾 當前系統C盤空間 清理後系統C盤空間 下載 Spacesniffer 下載地址:https://spacesniffer.en.softonic.com/dow ...
  • EDP是一套集組織架構,許可權框架【功能許可權,操作許可權,數據訪問許可權,WebApi許可權】,自動化日誌,動態Interface,WebApi管理等基礎功能於一體的,基於.net的企業應用開發框架。通過友好的編碼方式實現數據行、列許可權的管控。 ...
  • 一、ReZero簡介 ReZero是一款.NET中間件 : 全網唯一開源界面操作就能生成API , 可以集成到任何.NET6+ API項目,無破壞性,也可讓非.NET用戶使用exe文件 免費開源:MIT最寬鬆協議 , 一直從事開源事業十年,一直堅持開源 1.1 純ReZero開發 適合.Net Co ...
  • 一:背景 1. 講故事 停了一個月沒有更新文章了,主要是忙於寫 C#內功修煉系列的PPT,現在基本上接近尾聲,可以回頭繼續更新這段時間分析dump的一些事故報告,有朋友微信上找到我,說他們的系統出現了大量的http超時,程式不響應處理了,讓我幫忙看下怎麼回事,dump也抓到了。 二:WinDbg分析 ...
  • 開始做項目管理了(本人3年java,來到這邊之後真沒想到...),天天開會溝通整理需求,他們講話的時候忙裡偷閑整理一下常用的方法,其實語言還是有共通性的,基本上看到方法名就大概能猜出來用法。出去打水的時候看到外面太陽好好,真想在外面坐著曬太陽,回來的時候好兄弟三年前送給我的鍵盤D鍵不靈了,在打"等待 ...