python筆記:第四章使用字典

来源:https://www.cnblogs.com/lmc7/archive/2023/07/08/17537975.html
-Advertisement-
Play Games

## 1.1 概述 > 說白了就是鍵值對的映射關係 > > 不會丟失數據本身關聯的結構,但不關註數據的順序 > > 是一種可變類型 ```py 格式:dic = {鍵:值, 鍵:值} ``` * 鍵的類型:字典的鍵可以是任何不可變的類型,如浮點數,字元串,元組 ## 1.2 函數dict 可以從其他 ...


1.1 概述

說白了就是鍵值對的映射關係

不會丟失數據本身關聯的結構,但不關註數據的順序

是一種可變類型

格式:dic = {鍵:值, 鍵:值}
  • 鍵的類型:字典的鍵可以是任何不可變的類型,如浮點數,字元串,元組

1.2 函數dict

可以從其他映射或鍵值對創建字典

items = [('name', 'Gumby'), ('age', 42)]
d =dict(items)
print(d)
> {'name': 'Gumby', 'age': 42}
d = dict(name='Gumby', age=42)
print(d)
> {'name': 'Gumby', 'age': 42}

1.3 字典的基本操作

num = len(d) # 返回字典的鍵值對數量
str1 = d[鍵] # 參數為鍵 返回值為對應的值
d[鍵] = '值' # 將tom賦值給name1鍵
test = 鍵 in 字典名字 # 檢查name3鍵是否在字典中
d = {
    'name_a' :'Gumby', 'age1':42, 
    'name_b' :'bob', 'age2':12, 
    'name_c':'lily', 'age3':14}
num = len(d) # 返回字典的鍵值對數量
print('num=' + str(num))
> num=6
str1 = d['name_a'] # 參數為鍵 返回值為對應的值
print('name_a=' + str1)
> name_a=Gumby
d['name_a'] = 'tom' # 將tom賦值給name1鍵
print('name_a=' + d['name_a'])
> name_a=tom
test = 'name_c' in d # 檢查name3鍵是否在字典中
print(test)
> True

1.4 與format相結合

將字元串格式設置功能用於字典

使用format_map將兩者結合起來

phonebook = {'bob' : 1211, 'tom': 2322}
str1 = "I am bob. My phone is {bob}".format_map(phonebook)
print(str1)
> I am bob. My phone is 1211

1.5 字典常用方法

1.5.1 clear刪除所有字典項

就地執行,無返回值

d = {
    'name_a':'Gumby', 'age1':42, 
    'name_b':'bob', 'age2':12, 
    'name_c':'lily', 'age3':14}
d.clear()
print(d)
> {}

python中的變數賦值,是將變數名指向該地址,對該變數名的字典操作,實際上是對該地址存儲的字典進行操作,如:

d = {
    'name_a' :'Gumby', 'age1':42, 
    'name_b' :'bob', 'age2':12, 
    'name_c':'lily', 'age3':14}
x = d
x.clear()
print(x)
print(d)
> {}
> {}   # 發現兩個字典均被清空

若將x再次賦其他值,對原來的字典沒有影響

d = {
    'name_a' :'Gumby', 'age1':42, 
    'name_b' :'bob', 'age2':12, 
    'name_c':'lily', 'age3':14}
x = {}
x.clear()
print(d)
print(x)
>
{'name_a': 'Gumby', 'age1': 42, 'name_b': 'bob', 'age2': 12, 'name_c': 'lily', 'age3': 14}
{}

1.5.2 copy淺複製與深複製

淺複製

返回一個新字典,與原來的字典完全相同(淺複製)

d = {
    'name_a' :'Gumby', 'age1':42, 
    'name_b' :'bob', 'age2':12}
x = d.copy()
print(d)
print(x)
> 
{'name_a': 'Gumby', 'age1': 42, 'name_b': 'bob', 'age2': 12}
{'name_a': 'Gumby', 'age1': 42, 'name_b': 'bob', 'age2': 12}

淺複製要分兩種情況進行討論:

1)當淺複製的值是不可變對象(字元串、元組、數值類型)時和“賦值”的情況一樣,對象的id值(id()函數用於獲取對象的記憶體地址)與淺複製原來的值相同。

2)當淺複製的值是可變對象(列表、字典、集合)時會產生一個“不是那麼獨立的對象”存在。有兩種情況:

  • 第一種情況:複製的對象中無複雜子對象,原來值的改變並不會影響淺複製的值,同時淺複製的值改變也並不會影響原來的值。原來值的id值與淺複製原來的值不同。

  • 第二種情況:複製的對象中有複雜子對象(例如列表中的一個子元素是一個列表),如果不改變其中複雜子對象,淺複製的值改變並不會影響原來的值。 但是改變原來的值中的複雜子對象的值會影響淺複製的值。

參考:Python中的賦值(複製)、淺拷貝與深拷貝 - 知乎 (zhihu.com)

深複製

模塊copy中的deepcopy 可以同時複製值以及包含的所有值

from copy import deepcopy
d = {
    'name_a' :'Gumby', 'age1':42, 
    'name_b' :'bob', 'age2':12}
x = deepcopy(d) # 深
y = d.copy() # 淺
x.clear()
print(d)
print(y)

1.5.3 fromkeys 按條件創建字典

創建一個新字典,其中包含指定的鍵,且每個鍵對應的值都是None

d = dict.fromkeys(['name','age'])
print(d)
> {'name': None, 'age': None}

若不想使用預設值None 可以提供特定的值

d = dict.fromkeys(['name','age'], 'default')
print(d)
> {'name': 'default', 'age': 'default'}

1.5.4 get 通過鍵獲取值

原來的直接通過鍵獲取對應的值時,可能因為字典中沒有該鍵而報錯。

d = dict.fromkeys(['name','age'], 'default')
print(d['weight'])
> 
    print(d['weight'])
          ~^^^^^^^^^^
KeyError: 'weight'

而get方法下,尋找不存在的鍵值時,會返回None(可指定),不會報錯

d = dict.fromkeys(['name','age'], 'default')
print(d.get('weight'))
> None

指定失敗返回值為 N/A (可用於返回錯誤信息)

d = dict.fromkeys(['name','age'], 'default')
print(d.get('name', 'N/A'))
> N/A

查找成功,正常返回對應值

d = dict.fromkeys(['name','age'], 'default')
print(d.get('name', 'N/A'))
> default

1.5.5 items 將字典變成列表輸出

返回一個包含所有字典項的列表,其中每個元素都為(key, value)的形式,順序不固定

d = {
    'name_a' :'Gumby', 'age1':42, 
    'name_b' :'bob', 'age2':12}
li = d.items()
print(li)
> dict_items([('name_a', 'Gumby'), ('age1', 42), ('name_b', 'bob'), ('age2', 12)])

返回值屬於字典視圖的特殊類型,特點是不複製,始終是原字典的反映,隨原字典改變而改變

d['name_a'] = 'tom' # 修改原字典
print(li)
> 
dict_items([('name_a', 'tom'), ('age1', 42), ('name_b', 'bob'), ('age2', 12)])

1.5.6 keys 返回字典的鍵

返回值為字典視圖

d = {
    'name_a' :'Gumby', 'age1':42, 
    'name_b' :'bob', 'age2':12}
li = d.keys()
print(li)
> dict_keys(['name_a', 'age1', 'name_b', 'age2'])

1.5.7 pop獲取鍵對應的值,並刪除鍵值

d = {'name_a' :'Gumby', 'age1':42}
li = d.pop('name_a')
print(li)
print(d)
>
Gumby
{'age1': 42}

1.5.8 popitem “彈出”一組鍵值對

隨機返回一組鍵值對,並從字典中刪去該鍵值對,與列表中的pop方法類似,只是字典沒有最後一位的概念

d = {'name_a' :'Gumby', 'age1':42}
print(d.popitem())
print(d.popitem())
print(d)
> 
('age1', 42)
('name_a', 'Gumby')
{}
d = {'name_a' :'Gumby', 'age1':42}
d_len = len(d.items())
print(d_len)
i = 0
while(i < d_len):
    print(d.popitem())
    i = i + 1
> 
2
('age1', 42)
('name_a', 'Gumby')

1.5.9 setdefault 獲取指定鍵值 無則添加

有點像get 但對於找不到指定的鍵時,會添加指定的鍵值

d = {}
print(d.setdefault('name', 'None'))
print(d)
> 
None
{'name': 'None'}

1.5.10 update 使用A字典的項更新B字典

d1 = {'name': 'bob', 'age': 12}
d2 = {'name': 'tom'}
d1.update(d2)
print(d1)
> {'name': 'tom', 'age': 12}

1.5.11 values 返回字典的值

不同於鍵的唯一性,values的返回值可能有相同值

d1 = {'name': 'bob', 'age': 60, 'weight': 60}
print(d1.values())
> dict_values(['bob', 60, 60])

返回類型同樣為字典視圖


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

-Advertisement-
Play Games
更多相關文章
  • 一、影響 Linux 性能的各種因素 1、系統硬體資源 (1)CPU 如何判斷多核 CPU 與超線程 消耗 CPU 的業務:動態 web 服務、mail 服務 (2)記憶體 物理記憶體與 swap 的取捨 選擇 64 位 Linux 操作系統 消耗記憶體的業務:記憶體資料庫(redis/hbase/mong ...
  • ![](https://img2023.cnblogs.com/blog/3076680/202307/3076680-20230706135746797-1984903730.png) # 1. 複製數據到另一個表 ## 1.1. sql ```sql insert into dept_east ...
  • # 資料庫概論系統—系統篇 ## 一、關係查詢處理和查詢優化 ### 1.1關係資料庫的查詢處理 查詢處理可分為四個階段:查詢分析、檢查檢查、查詢優選和查詢執行(其中查詢優化可分為代數和物理優化) ### 1.2關係資料庫系統的查詢優化 查詢優化的優點不僅在於用戶不必考慮如何最好地表達查詢以獲得較高 ...
  • ## 1. SSL原理 SSL(Secure Sockets Layer)是一種用於安全地傳輸數據的加密協議。在MySQL中,SSL可以用於加密客戶端與伺服器之間的通信,以防止數據被竊取或篡改。SSL通過以下方式實現數據的加密和身份驗證: - **加密通信**:SSL使用非對稱加密和對稱加密相結合的 ...
  • 有一段時間,在B站那裡刷視頻的時候,無意刷到一個德生的收音機視頻。突然讓我想起了我的中學時代,我的中學時代是在收音機的陪伴之下成長的。那個時候,主要的想法是為了收聽短波的英文電臺,美名日學習英語。不過那個時候,能清晰聽到的英文廣播電臺並不多,更多的是外國播放的中文廣播電臺,而這些電臺大多數是說國內的 ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 介紹 今天介紹一個非常簡單的入門級小案例,就是地圖的捲簾效果實現,各大地圖引擎供應商都有相關示例,很奇怪高德居然沒有,我看了下文檔發現其實也是可以簡單實現的,演示代碼放到文末。本文用到了圖層掩模,即圖層遮罩,讓圖層只在指定範圍內顯示。 實 ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 背景 因為我們日常開發項目的時候,需要和同事對接api和文檔還有UI圖,所以有時候要同時打開多個視窗,併在多個視窗中切換,來選擇自己要的信息,如果api和文檔不多的情況還好,但是有時候就是要做大量的頁面,為了提升效率我決定自己做一個截圖工 ...
  • 一. 源碼展示: 1. Object.equals: ①引用類型地址值比較,直接返回結果:true || false public class Object { public boolean equals(Object obj) { return (this == obj); } } 2. Stri ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...