Python 學習筆記(九)Python元組和字典(三)

来源:https://www.cnblogs.com/wangruihua-521/archive/2018/03/14/8554950.html
-Advertisement-
Play Games

字典常用方法 copy() 返回一個字典的淺複製 示例:淺拷貝d.copy() 深拷貝引入import copy copy.deepcopy() clear() 刪除字典內所有元素 clear是清除字典中的元素,不是把這個字典刪除, 刪除字典需要用del 清空字典也可用e={} get() 返回指定 ...


字典常用方法

copy() 返回一個字典的淺複製

示例:淺拷貝d.copy() 

   深拷貝引入import copy   copy.deepcopy()

 1 >>> help(dict.copy)  #help()查看dict.copy的詳細內容
 2 Help on method_descriptor:
 3 
 4 copy(...)
 5     D.copy() -> a shallow copy of D  #字典d的淺拷貝
 6 
 7 >>> d ={"name":"python","web":"www.baidu.com"}
 8 >>> e =d
 9 >>> e
10 {'web': 'www.baidu.com', 'name': 'python'}
11 >>> d
12 {'web': 'www.baidu.com', 'name': 'python'}
13 >>> id(e)
14 49259112L
15 >>> id(d)   #可以看出e和d在記憶體中地址相同,e和d引用的是同一個對象
16 49259112L
17 >>> f=d.copy() #字典d的淺複製   
18 >>> f
19 {'web': 'www.baidu.com', 'name': 'python'}
20 >>> id(f)  #可以看出f與上面的e和d的記憶體地址不同,f創建了新的字典對象
21 13708552L
22 >>> d["lang"]="python"  #向字典d中添加一個對象,d中發生了變化,字典f並沒有收到影響,說明字典f是一個新的字典對象,d 和f 是兩個不同的對象
23 >>> d
24 {'lang': 'python', 'web': 'www.baidu.com', 'name': 'python'}
25 >>> f    
26 {'web': 'www.baidu.com', 'name': 'python'}
27 >>> d={"name":"zhangsan","enjoy":["python","tea","book"]}  #新建一個字典
28 >>> e =d.copy()   #對字典進行copy
29 >>> id(d),id(e)  #看出他倆的記憶體地址不同,是兩個不同的對象
30 (13708280L, 13719208L)
31 >>> d["enjoy"]   #從字典d中取出enjoy所對應的列表的值
32 ['python', 'tea', 'book']
33 >>> d["enjoy"].remove("book") #將字典d中key為enjoy,值為book的元素移除
34 >>> d     #d 中的book已經被移除
35 {'enjoy': ['python', 'tea'], 'name': 'zhangsan'}
36 >>> e    #e中的book也被移除了
37 {'enjoy': ['python', 'tea'], 'name': 'zhangsan'}
38 >>> id(d["enjoy"]) #查看d['enjoy']的記憶體地址 與e['enjoy']的記憶體地址相同,說明是同一對象,copy只進行了淺拷貝,並沒有對enjoy列表進行拷貝,只是引用
39 49135752L
40 >>> id(e["enjoy"])
41 49135752L
42 >>> import copy  #引入copy模塊進行 深拷貝
43 >>> d
44 {'enjoy': ['python', 'tea'], 'name': 'zhangsan'}
45 >>> z =copy.deepcopy(d) #深拷貝
46 >>> z
47 {'enjoy': ['python', 'tea'], 'name': 'zhangsan'}
48 >>> id(d),id(z)  #可看出d和z 是不同的兩個對象
49 (13708280L, 13720296L) 
50 >>> id(d['enjoy']),id(z['enjoy'])  #可看出d['enjoy']和z['enjopy'] 記憶體地址不同,是兩個不同對象
51 (49135752L, 50109128L)

clear() 刪除字典內所有元素 

  clear是清除字典中的元素,不是把這個字典刪除,

  刪除字典需要用del

  清空字典也可用e={}

 1 >>> help(dict.clear)
 2 Help on method_descriptor:
 3 
 4 clear(...)
 5     D.clear() -> None.  Remove all items from D. #刪除字典中的所有元素
 6 
 7 >>> z
 8 {'enjoy': ['python', 'tea'], 'name': 'zhangsan'}
 9 >>> z.clear() #清除字典z中的元素
10 >>> z   #字典中的元素為空,字典存在,沒有刪除字典
11 {}
12 >>> del z  #刪除字典可用del 
13 >>> e
14 {'enjoy': ['python', 'tea'], 'name': 'zhangsan'}
15 >>> e ={}  #清空字典中的元素可以使用e={}
16 >>> e
17 {}
18 >>>

get()  返回指定鍵的值,如果值不在字典中返回default值

 1 >>> help(dict.get)
 2 Help on method_descriptor:
 3 
 4 get(...)
 5     D.get(k[,d]) -> D[k] if k in D, else d.  d defaults to None. 如果k存在於d中則返回key所對應的值,否則預設返回None
 6 
 7 >>> d = {"enjoy":["python","tea"],"name":"zhangsan"}
 8 >>> d
 9 {'enjoy': ['python', 'tea'], 'name': 'zhangsan'}
10 >>> d.get("name") #返回指定鍵name,所對應的值
11 'zhangsan'
12 >>> d.get("enjoy") #返回指定鍵enjoy,所對應的值
13 ['python', 'tea']
14 >>> d["name"]  #這種方式也可以獲取,與d.get()的區別,就是如果字典中沒有key值,將會報錯keyError 如下示例
15 'zhangsan'
16 >>> d.get("teacher") #如果d.get("teacher")不存在則返回預設值none
17 >>> d.get("teacher","laoshi") #如果d.get("teacher")不存在,則返回後面的值
18 'laoshi'
19 >>> d["teacher"]
20 Traceback (most recent call last):
21   File "<stdin>", line 1, in <module>
22 KeyError: 'teacher'
23 >>>

setdefault() 和get()類似, 但如果鍵不存在於字典中,將會添加鍵並將值設為default

 1 >>> help(dict.setdefault)
 2 Help on method_descriptor:
 3 
 4 setdefault(...)
 5     D.setdefault(k[,d]) -> D.get(k,d), also set D[k]=d if k not in D
 6 
 7 >>> d
 8 {'enjoy': ['python', 'tea'], 'name': 'zhangsan'}
 9 >>> d.setdefault("name")  #取出d中key為name的值
10 'zhangsan'
11 >>> d.setdefault("city","beijing") #city 不存在與字典中,則將city添加與字典中,city為key,beijing為value
12 'beijing'
13 >>> d
14 {'enjoy': ['python', 'tea'], 'city': 'beijing', 'name': 'zhangsan'}
15 >>> d.setdefault("teacher")  #teacher 不存在於字典中,則將teacher 作為key,value為none加入字典中
16 >>> d
17 {'enjoy': ['python', 'tea'], 'city': 'beijing', 'name': 'zhangsan', 'teacher': None}
18 >>>

items() 以列表返回可遍歷的(鍵, 值) 元組數組

iteritems() 與items()方法類似,返回的是一個迭代器

 1 >>> help(dict.items)
 2 Help on method_descriptor:
 3 
 4 items(...)
 5     D.items() -> list of D's (key, value) pairs, as 2-tuples #通過字典items方法得到的是含有字典key value元組為元素的列表
 6 
 7 >>> d
 8 {'enjoy': ['python', 'tea'], 'city': 'beijing', 'name': 'zhangsan', 'teacher': None}
 9 >>> d.items() #得到key、value元組為元素的列表
10 [('enjoy', ['python', 'tea']), ('city', 'beijing'), ('name', 'zhangsan'), ('teacher', None)]
11 >>> help(dict.iteritems)
12 Help on method_descriptor:
13 
14 iteritems(...)
15     D.iteritems() -> an iterator over the (key, value) items of D
16 
17 >>> d_iter=d.iteritems()
18 >>> type(d_iter)  
19 <type 'dictionary-itemiterator'>
20 >>> d_iter  
21 <dictionary-itemiterator object at 0x00000000013EDD68>
22 >>> list(d_iter) 
23 [('enjoy', ['python', 'tea']), ('city', 'beijing'), ('name', 'zhangsan'), ('teacher', None)]
24 >>>

keys() 以列表返回一個字典所有的鍵

iterkeys()

 1 >>> help(dict.keys)
 2 Help on method_descriptor:
 3 
 4 keys(...)
 5     D.keys() -> list of D's keys  #用這個方法,得到一個列表,這個列表是以字典key為元素來組成的
 6 
 7 >>> d
 8 {'enjoy': ['python', 'tea'], 'city': 'beijing', 'name': 'zhangsan', 'teacher': None}
 9 >>> d.keys() #得到字典中所有的key
10 ['enjoy', 'city', 'name', 'teacher']
11 >>> d.iterkeys() #迭代器
12 <dictionary-keyiterator object at 0x00000000013EDE58>
13 >>>

values() 以列表返回字典中的所有值

itervalues()

1 >>> d.values()  #得到字典value的列表
2 [['python', 'tea'], 'beijing', 'zhangsan', None]
3 >>> d.itervalues() #迭代器
4 <dictionary-valueiterator object at 0x00000000013EDE58>
5 >>>

pop()    刪除字典給定鍵 key 所對應的值,返回值為被刪除的值。key值必須給出。 否則,返回default值。

 1 >>> help(dict.pop)
 2 Help on method_descriptor:
 3 #參數至少有一個key,相應著會返回一個字典中key所對應的value.
  #如果字典中沒有key,就返回第二個參數d的值,但如果d的值不寫,就會報錯 4 pop(...) 5 D.pop(k[,d]) -> v, remove specified key and return the corresponding value. 6 If key is not found, d is returned if given, otherwise KeyError is raised 7 8 >>> d 9 {'enjoy': ['python', 'tea'], 'city': 'beijing', 'name': 'zhangsan', 'teacher': None} 10 >>> d.pop("enjoy")#刪除enjoy鍵值對,返回的是enjoy對應的value值 11 ['python', 'tea'] 12 >>> d 13 {'city': 'beijing', 'name': 'zhangsan', 'teacher': None} 14 >>> d.pop("enjoy","python") #在字典d中已經沒有enjoy這個鍵值對,返回第二個參數python 15 'python' 16 >>>

popitem()  隨機返回並刪除字典中的一對鍵和值。

 1 >>> help(dict.popitem)
 2 Help on method_descriptor:
 3 
 4 popitem(...)
 5     D.popitem() -> (k, v), remove and return some (key, value) pair as a
 6     2-tuple; but raise KeyError if D is empty.
 7 
 8 >>> d
 9 {'city': 'beijing', 'name': 'zhangsan', 'teacher': None}
10 >>> d.popitem()   #返回刪除的鍵值對,每次只能刪除一個,且是隨機刪除一個鍵值對,如果已經沒有鍵值對了,再去刪除就會報錯
11 ('city', 'beijing')
12 >>> d.popitem()
13 ('name', 'zhangsan')
14 >>> d.popitem()
15 ('teacher', None)
16 >>> d.popitem()
17 Traceback (most recent call last):
18   File "<stdin>", line 1, in <module>
19 KeyError: 'popitem(): dictionary is empty'
20 >>>

update ()   把字典dict2的鍵/值對更新到dict里

1.返回值是none

2.以字典或可迭代對象為參數

3.如果參數有keys方法,就會迴圈E中的k,實現D[k]=E[kj]

 1 >>> help(dict.update)
 2 Help on method_descriptor:
 3 
 4 update(...)
 5     D.update([E, ]**F) -> None.  Update D from dict/iterable E and F.
 6     If E present and has a .keys() method, does:     for k in E: D[k] = E[k]
 7     If E present and lacks .keys() method, does:     for (k, v) in E: D[k] = v
 8     In either case, this is followed by: for k in F: D[k] = F[k]
 9 
10 >>> d1={"lang":"python"}
11 >>> d2={"name":"zhangsan"}
12 >>> d1.update(d2)
13 >>> d1
14 {'lang': 'python', 'name': 'zhangsan'}
15 >>> d2
16 {'name': 'zhangsan'}
17 >>> d2.update([("city","beijing"),("web","java"),("site","baidu.com")])
18 >>> d2
19 {'site': 'baidu.com', 'city': 'beijing', 'name': 'zhangsan', 'web': 'java'}
20 >>>

has_key() 如果鍵在字典dict里返回true,否則返回false

 1 >>> help(dict.has_key)
 2 Help on method_descriptor:
 3 
 4 has_key(...)
 5     D.has_key(k) -> True if D has a key k, else False
 6 
 7 >>> d2.has_key("city") #判斷key是否存在
 8 True
 9 >>> "city" in d2
10 True
11 >>>

 


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

-Advertisement-
Play Games
更多相關文章
  • 內容:通過修改hosts文件,讓pycharm不能夠聯網驗證激活碼的方式 1、修改hosts文件 文件位置:C:\Windows\System32\drivers\etc 在文件末尾添加:0.0.0.0 account.jetbrains.com 如圖: 2、打開PyCharm,選擇 Activat ...
  • 某地區經過對城鎮交通狀況的調查,得到現有城鎮間快速道路的統計數據,並提出“暢通工程”的目標:使整個地區任何兩個城鎮間都可以實現快速交通(但不一定有直接的快速道路相連,只要互相間接通過快速路可達即可)。現得到城鎮道路統計表,表中列出了任意兩城鎮間修建快速路的費用,以及該道路是否已經修通的狀態。現請你編 ...
  • 以下基本不是原創,都是轉載。 JVM運行時,首先需要類載入器(ClassLoader) 載入所需類的位元組碼,載入完畢交由執行引擎執行,執行過程中需要一段空間來存儲數據(類比CPU與主存)。這段記憶體空間的分配和釋放過程正是我們所關心的,稱為運行時數據區。 運行時數據區 如上圖所示,運行時數據區包括:程 ...
  • 1.創建變數; 2.使用不同類型的變數; 3.在變數中存儲值; 4.在數學表達式中使用變數; 5.把一個變數的值賦給另一個變數; 6.遞增/遞減變數的值。 程式Variable:使用不同類型的變數並賦初值 1 package com.jsample; 2 3 public class Variabl ...
  • AOP:面向切麵編程,就是把除去業務部分以外的東西單獨模塊化,比如打日誌等,就像學生信息的增刪改查,可以把輸出日誌單獨模塊化出來,通過切麵對的方式進行編程。 在進行實例編寫之前先進行一些專業術語的瞭解 切麵aspect:是對象操作過程中的截面,是一段代碼,實現額外的模塊化功能 連接點join poi ...
  • Spring Boot已成為當今最流行的微服務開發框架,本文是如何使用Spring Boot快速開始Web微服務開發的指南,我們將使創建一個可運行的包含內嵌Web容器(預設使用的是Tomcat)的可運行Jar包。 傳統的Spring應用程式需要配置大量的XML文件才能運行,而使用Spring Boo ...
  • 一、前言 1.1.環境 python版本:3.6 Django版本:1.11.6 1.2.預覽效果 最終搭建的blog的樣子,基本上滿足需求了。框架搭好了,至於CSS,可以根據自己喜好隨意搭配。 二、建立博客應用 2.1.建立項目和應用 創建工程blogproject 創建blog應用 打開 blo ...
  • 中國大學MOOC-陳越、何欽銘-數據結構-2018春 第二講課後習題第四題 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...