網站首頁 編程語言 正文
前言
以下內容均為個人筆記,僅供學習參考使用,因內容均為自己實踐經驗所得,個人水平有限,如有錯誤歡迎指正
注:編程語言為Python3
1.get()函數利用鍵來獲取值
之前在學習python的時候,在獲取值得時候常用的方法就是直接
print(dict[key])
但這種方法中當字典中不存在該鍵時會返回KeyError類型錯誤,此時就可以用get()函數還利用鍵獲取值
print(dict.get(key))
利用get()函數操作時當字典中不存在輸入的鍵時會返回一個None,這樣程序運行時就不會出異常
2.利用字典統計列表中元素出現次數
比如現在有這么一個列表,讓你統計列表中部分元素出現的次數
ls=['aa','b','c','ddd','aa']
統計列表中每個元素出現次數:
cou={} #創建一個空字典 for i in ls: cou[i]=cou.get(i,0)+1 #之后稱其為get的賦值語句,目的是新建字典鍵值對 ''' 賦值語句代碼等價于 cou[i]=0 cou[i}=cou[i]+1 ''' print(cou)
輸出結果:
{'aa': 2, 'b': 1, 'c': 1, 'ddd': 1}
get()函數在這里有兩個參數,第一個是確定要分配值的鍵,第二個是擬定給鍵分配一個初值,但實際要給鍵賦值仍需要get賦值語句(為什么這么說下面有介紹)
比如說我現在添加這個語句到代碼中
cou.get('b',10) #之后稱為擬定初值語句
擬定初值語句本身對結果是沒有影響的,因為并沒有實際的對鍵進行賦值語句操作(個人感覺擬定初值語句是因為沒有在字典中找到要賦值的鍵,因為根本沒有創建要賦值的鍵,因此賦值失敗,即相當于一個沒有返回值的函數,就算給這個函數賦參數了也沒有任何返回結果)
注:get()函數在作為鍵賦值語句(非擬定賦值語句,區別看上代碼框內注釋)時只有第一次是有效的,(比如get()函數在第一次對’aa’這個鍵使用get賦值語句后下次再使用get賦值語句時鍵的值仍為第一次賦值運算后的結果),以下為測試代碼:
ls=['aa','b','c','ddd','aa'] cou={} #創建一個空字典 for i in ls: cou[i]=cou.get(i,0)+1 #功能邏輯看下方闡述 cou['aa']=cou.get('aa',10) #功能同前一條代碼執行到第二次時的 print(cou)
這里著重講一下第4行代碼:cou[i]=cou.get(i,0)+1
第行代碼從邏輯上講執行了兩次,而這兩次里get語句每次執行時的功能是不一樣的:
第一次:cou[i]=cou.get(i,0)+1(i=‘aa’)
此時get語句的功能為賦初值,即把鍵’aa’的初值置為0然后加1
第二次:cou[i]=cou.get(i,0)+1(i=‘aa’)
因get語句已經作為賦值語句出現過一次了,因此此時再執行這條語句時,賦值功能已經無效了,也就是get語句里第二個參數對’aa’這個鍵已經無效了,此時get語句的功能為文章內的第一大部分所介紹的功能,所以這條語句此時可等價為
cou[i]=cou.get(i)+1
即
cou[i]=cou[i]+1
輸出結果和之前的代碼結果相同:
{'aa': 2, 'b': 1, 'c': 1, 'ddd': 1}
當單獨使用get賦值語句時如果鍵是第一次出現的話,效果等同賦值語句(和之前在空字典里通過for循環建立新鍵值對效果一樣)
cou['e']=cou.get(e,10)
輸出結果:
```python
{'aa': 10, 'b': 1, 'c': 1, 'ddd': 1,'e':10}
順帶一提如果想直接改變字典中鍵的值時可用如下方法:
cou['aa']=10 #這種賦值語句帶有強制性 print(cou)
輸出結果:
{'aa': 10, 'b': 1, 'c': 1, 'ddd': 1}
補充:和dict[key]的區別
dict.get(key)和dict[key]在key值存在的情況下,都能得到對應的鍵值。但是當使用dict[key]時,key必須要存在,否則會報錯。但是dict.get[key]中的key可以不存在,因為get方法有一個默認的參數None,當key不存在的時候,返回None。
總結
原文鏈接:https://blog.csdn.net/aaa9692/article/details/115469795
相關推薦
- 2022-04-23 C#面向對象的23種設計模式介紹_C#教程
- 2022-06-13 基于Docker與Jenkins實現自動化部署的原理解析_docker
- 2022-02-18 取一個數組中想要的值,放到一個新的對象里
- 2022-11-16 anaconda打開閃退的解決過程_python
- 2022-10-26 jQuery中DOM?屬性使用實例詳解上篇_jquery
- 2022-08-01 C#串口編程System.IO.Ports.SerialPort類_C#教程
- 2022-07-26 Python+Seaborn繪制分布圖的示例詳解_python
- 2023-05-30 C++中map和set的使用詳細攻略_C 語言
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支