關于Python中的字典你所不知道的七個技巧

01

引言

Python是我最喜歡的編程語言之一,它向來以其簡單性、多功能性和可讀性而聞名。

字典作為Python中最常使用的數據類型,大家幾乎每個人都或多或少在項目中使用過字典,但是字典里有一些潛在的技巧可能并不是每個同學都會用到。

在本文中,我們將深入探討七個關于字典的使用技巧,希望可以幫助到大家!

02

初始化技巧

如果讓大家創建一個字典,大家可能80%都會直接選擇{}來進行創建,代碼示例如下:

# normal way of creating a dictionary``   ``d = {'apple':4, 'orange':5, 'pear':6, 'pineapple':7}

這里推薦大家直接使用 dict(key=value)的方式來創建字典,代碼如下:

# 'better' way to creating same dictionary``   ``d = dict(apple=4, orange=5, pear=6, pineapple=7)

雖然兩者實現了相同的功能,但是為什么第二種方式更好呢?

  • 使用 {} 創建字典時,我們需要在字符串的鍵上加上引號來說明我們key的數據類型為字符串;由于我們有很多元素,所以我們就需要不斷輸入新的引號;而我們第二種方式下,則不需要輸入引號。

  • dict方法不適用于非字符串的鍵,因此這兩種方式都有其具體使用的場合。

03

字典合并

這里推薦大家使用解包符號******來進行兩個字典的合并,代碼如下:

# here are 2 dicts``a = {1:1, 2:2}``b = {3:3, 4:4}``   ``# we can combine them using **``x = {**a, **b}``print(x) # {1:1, 2:2, 3:3, 4:4}

上述代碼中的 ** 會將鍵值對解包到父字典中,我們也可以在組建新字典的時候添加新的鍵值對,代碼如下:

# we can add normal key-value pairs too``a = {1:1, 2:2}``b = {3:3, 4:4}``   ``x = {**a, **b, 5:5}``print(x) # {1:1, 2:2, 3:3, 4:4, 5:5}

04

字典作為函數參數傳遞

我們可以使用**將字典作為函數關鍵字參數進行傳遞,我們來舉個簡單的例子,一般的函數調用如下:

# a function that takes in a, b, c``   ``def test(a, b, c):`    `print(a, b, c)``   ``test(a=1, c=2, b=3) # 1 3 2

我們也可以將包含key為 a、b 和 c 的字典動態地傳入該函數,如下:

mydict = dict(a=1, b=2, c=3)``print(mydict) # {'a':1, 'b':2, 'c':3}``   ``# this is the same as test(a=1, b=2, c=3)``test(**mydict) # 1 2 3

上述代碼中,我們使用 ** 進行字典解包,并將解包后相應的參數傳遞給對應的函數。

?

05

字典生成式

假設我們要創建以下字典 {1:1, 2:4, 3:9, 4:16},代碼如下:

# normal way to create this``   ``d = {}``for i in range(1, 5):`    `d[i] = i**2``   ``print(d) # {1: 1, 2: 4, 3: 9, 4: 16}

使用字典生成式的代碼如下:

# dict comprehension way to create this``   ``d = {i:i**2 for i in range(1, 5)}``   ``print(d) # {1:1, 2:4, 3:9, 4:16}

這兩種方法都是正確和合法的。但要注意的是,字典生成式理解起來要優雅得多、讀起來也容易得多。

我們再來看個嵌套字典的例子,一般寫法如下:

# nested for loops``   ``d = {}``for i in range(2):`    `for j in range(2, 4):`        `d[(i,j)] = 0``   ``print(d)``   ``# {(0, 2): 0, (0, 3): 0, (1, 2): 0, (1, 3): 0}

更優雅的寫法如下:

# nested for loops in dict comprehension``   ``d = {(i,j):0 for i in range(2) for j in range(2, 4)}``   ``print(d)``   ``# {(0, 2): 0, (0, 3): 0, (1, 2): 0, (1, 3): 0}

06

獲取默認值

當我們訪問一個不存在的鍵時,我們會得到 KeyError,如下:

d = {1:1, 2:2, 3:3}``   ``print(d[1])  # 1``print(d[4])  # KeyError

如果我們真的不希望出現 KeyError,則推薦使用字典中的get() 方法,如果鍵不存在,則返回 None。

# using .get()``   ``d = {1:1, 2:2, 3:3}``   ``print(d.get(1))  # 1``print(d.get(4))  # None

注意到上述代碼中,我們得到的不是KeyError,而是None。

更進一步,我們也可以指定返回的默認值,代碼如下:

# .get() but with custom default value``   ``d = {1:1, 2:2, 3:3}``   ``print(d.get(1, 100))    # 1``print(d.get(4, 100))    # 100``print(d.get(9, 100))    # 100

07

使用元組列表來創建字典

假設我們有以下元組構成的列表,示例如下:

# a list of tuples (of length 2)``   ``ls = [('apple', 4), ('orange', 5), ('pear', 6)]

則可使用以下技巧生成字典,代碼如下:

# we can pass this into dict() to create a dict``   ``d = dict(ls)``print(d)  # {'apple': 4, 'orange': 5, 'pear': 6}

這對快速從元組創建字典非常有用,無需編寫字典生成式。

08

遍歷字典

假設我們有以下字典,如下:

# a dict``d = dict(apple=4, orange=5, pear=6)``   ``print(d) # {'apple':4, 'orange':5, 'pear':6}

當我們遍歷 dict 本身時,我們則會生成所有 dict的鍵:

for k in d:`    `print(k)``   ``# apple``# orange``# pear

同時,我們也可以使用函數values()來訪問字典dict中所有的值,如下:

for v in d.values():`    `print(v)``   ``# 4``# 5``# 6

此外,如果我們使用函數items(),則鍵和值都會生成一個元組,如下:

for k,v in d.items():`    `print(k, v)``   ``# apple 4``# orange 5``# pear 6

我自己認為函數items() 是最有用的方法,可以快速遍歷字典中的所有鍵值對。

09

總結

本文介紹了Python中字典的七種有趣小技巧,使用這些技巧,可以快速提升大家的編碼能力。

您學廢了嗎?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/43233.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/43233.shtml
英文地址,請注明出處:http://en.pswp.cn/web/43233.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

相同含義但不同類型字段作為join條件時注意事項

假設表A和表B中都有表示學號的stu_id字段,但該字段在表A和表B中類型分別為bigint和string。當直接通過該字段進行join時,一般情況下可以得到我們預期的結果。 select a.stu_id from a as r join b as l on r.stu_id l.stu_id 但是如果學號長度較長的…

【UE5.1 角色練習】16-槍械射擊——瞄準

目錄 效果 步驟 一、瞄準時拉近攝像機位置 二、瞄準偏移 三、向指定方向射擊 四、連發 效果 步驟 一、瞄準時拉近攝像機位置 打開角色藍圖,在事件圖表中添加如下節點,當進入射擊狀態時設置目標臂長度為300,從而拉近視角。 但是這樣切…

勇攀新高峰|暴雨信息召開2024年中述職工作會議

7月8日至9日,暴雨信息召開2024年中述職工作會議,總結回顧了上半年的成績和不足,本次會議采用線上線下的方式舉行,公司各部門管理人員、前臺市場營銷人員參加述職,公司領導班子出席會議。 本次述職采取了現場匯報點評的…

關于宏v4l2_subdev_call的拆解

struct v4l2_subdev *sd結構體 struct v4l2_subdev { #if defined(CONFIG_MEDIA_CONTROLLER)struct media_entity entity; #endifstruct list_head list;struct module *owner;bool owner_v4l2_dev;u32 flags;struct v4l2_device *v4l2_dev;const struct v4l2_subdev_ops *op…

數字滾動動畫~

前言 數字從0.00滾動到某個數值的動畫 實現&#xff08;React版本&#xff09; Dom <div className"number" ref{numberRef}>0.00</div> JS const _initNumber () > {const targetNumber 15454547.69;const duration 1500;const numberElement…

vivado DRIVE、EDIF_EXTRA_SEARCH_PATHS

驅動器 DRIVE指定配置有I/O的輸出緩沖器的輸出緩沖器驅動強度&#xff08;mA&#xff09; 支持可編程輸出驅動強度的標準。 體系結構支持 所有架構。 適用對象 ?端口&#xff08;get_Ports&#xff09; 連接到輸出緩沖器的輸出或雙向端口 價值觀 整數值&#xff1a; ? 2 ? 4…

【UML用戶指南】-33-對體系結構建模-系統和模型

目錄 1、系統和子系統 2、模型和視圖 3、跟蹤 4、常用建模技術 4.1、對系統的體系結構建模 4.2、對系統的系統建模 模型是對現實世界的簡化——即對系統的抽象&#xff0c;建立模型的目的是為了更好地理解系統。 1、系統和子系統 一個系統可能被分解成一組子系統&#…

09.C2W4.Word Embeddings with Neural Networks

往期文章請點這里 目錄 OverviewBasic Word RepresentationsIntegersOne-hot vectors Word EmbeddingsMeaning as vectorsWord embedding vectors Word embedding processWord Embedding MethodsBasic word embedding methodsAdvanced word embedding methods Continuous Bag-…

esp32硬件電路設計

ESP-IDF 入門指南 | 樂鑫科技 (espressif.com) ESP32-DevKitC V4 入門指南 - ESP32 - — ESP-IDF 編程指南 v5.1 文檔 (espressif.com)

每日一題~abc356(對于一串連續數字 找規律)

添加鏈接描述 題意&#xff1a;對于給定的n,m 。計算0~n 每一個數和m & 之后&#xff0c;得到的數 的二進制中 1的個數的和。 一位一位的算。最多是60位。 我們只需要計算 在 1-n這些數上&#xff0c;有多少個數 第i位 為1. 因為是連續的自然數&#xff0c;每一位上1 的…

Linux下的misc設備驅動

文章目錄 前言一、misc是什么&#xff1f;二、調用API1.注冊2.注銷 三、驅動框架總結 前言 misc設備即雜項設備&#xff0c;Linux系統中類似按鍵、觸摸屏都有專門框架處理&#xff0c;類似adc、蜂鳴器等設備無法明確其屬于什么類型&#xff0c;一般就歸屬于雜項設備&#xff0…

Sqli-labs合集之環境搭建

Sqli-labs的搭建 搭建第一個SQL注入學習靶場環境&#xff1a; 軟件&#xff1a;sqli-labs 安裝過程&#xff1a; 1.源碼地址&#xff1a;GitHub - Audi-1/sqli-labs: SQLI labs to test error based, Blind boolean based, Time based.&#xff1b; 2.將壓縮包解壓到phpst…

PyCharm\VsCode——Python第三方庫下載換源

為什么要換源&#xff1f; Python第三方庫下載默認鏡像源在國外&#xff0c;因為特殊的原因在國內的你我利用這個鏡像源往往速度會非常地慢&#xff0c;因此為了提速將這個默認鏡像源換成國內的鏡像源是非常有必要的。 鏡像源的種類有哪些&#xff1f; 國外鏡像源——官方 http…

Python基礎學習筆記——異常

目錄 一、bug的簡介二、異常捕獲預處理機制1. 繼承2. 捕獲與預處理3. 嵌套與傳遞 一、bug的簡介 1947年&#xff0c;世界第一部萬用計算機的進化版——馬克2號&#xff08;Mark II&#xff09;的程序運行發生了異常&#xff0c;計算機程序之母格蕾絲經調試后&#xff0c;發現是…

C#實用的工具類庫

Masuit.Tools Masuit.Tools大都是靜態類&#xff0c;加密解密&#xff0c;反射操作&#xff0c;樹結構&#xff0c;文件探測&#xff0c;權重隨機篩選算法&#xff0c;分布式短id&#xff0c;表達式樹&#xff0c;linq擴展&#xff0c;文件壓縮&#xff0c;多線程下載&#xf…

非線性系列(三)—— 非線性求解器算法分類

1. 總體認知 CAE中的非線性方程組求解主要依賴牛頓法&#xff08;及牛頓法的變體&#xff09;&#xff0c;步驟如下 以線搜索方法為例&#xff0c;流程如下: 2. 方法分類 適用范圍大類小類描述牛頓法雅可比矩陣難獲取擬牛頓法 Broyden&#xff08;Secant method&#xff09;、…

DP(1) | Java | LeetCode 509, 70, 746 做題總結

509. 斐波那契數 https://leetcode.cn/problems/fibonacci-number/ 確定dp數組&#xff08;dp table&#xff09;以及下標的含義 dp[i] 第i個斐波那契數值為dp[i] 確定遞推公式 題目說了 F(n) F(n - 1) F(n - 2)dp數組如何初始化 題目說了 F(0) 0&#xff0c;F(1) 1確定遍歷…

15. Revit API: Transaction(事務)與 Failures(故障處理)

前言 UI講完&#xff0c;回到DB這塊兒。在Document那篇&#xff0c;提到增刪改查操作都是在Document上&#xff0c;是對Documet進行操作。 看到“增刪改查”這四個&#xff0c;想到什么了沒有&#xff1f; 數據庫&#xff08;DB&#xff09;嘛~話說那本經典的紅皮數據庫的書叫…

網絡安全----防御----防火墻安全策略組網

防火墻組網 要求&#xff1a; 1&#xff0c;DMz區內的服務器&#xff0c;辦公區僅能在辦公時間內(9:00-18:00)可以訪問&#xff0c;生產區的設備全天可以訪問。 2&#xff0c;生產區不允許訪問互聯網&#xff0c;辦公區和游客區允許訪問互聯網 3&#xff0c;辦公區設備10.0.…

計算機網絡之廣域網

廣域網特點: 主要提供面向通信的服務&#xff0c;支持用戶使用計算機進行遠距離的信息交換。 覆蓋范圍廣,通信的距離遠&#xff0c;需要考慮的因素增多&#xff0c; 線路的冗余、媒體帶寬的利用和差錯處理問題。 由電信部門或公司負責組建、管理和維護&#xff0c;并向全社會…