第四章 字典

第四章 字典{'鍵':'值','名字':'電話號碼'}

映射:通過名稱來訪問其各個值的數據結構
列表:將一系列值組合成數據結構并通過編號來訪問各個值

字典是Python中唯一的內置映射類型,其中的值不按順序排列,而是存儲在鍵下
鍵可能是數、字符串或元組

字典由鍵(必須唯一,可以是任意數據類型但是唯一即可)及其相應的組成,這種鍵-值對稱為

鍵為名字,值為電話號碼
每個鍵與其值之間都用冒號(:)分隔,項之間用逗號分隔,整個字典放在花括號內
空字典(沒有任何項)用兩個花括號表示{}。

phones = {'yanyu':'159368','huangjiaju':'787084','huangjiaiqnag':'784512369','yeshirong':'963214587'}

創建和使用字典

函數dict,從其他映射(如其他字典)或鍵-值對序列創建字典

message = [('name','yanyu'),('age',22)]
yanyu = dict(message)
yanyu#結果為:{'name': 'yanyu', 'age': 22}beyond = dict(name="huangjiaju",age=31)
beyond#結果為:{'name': 'huangjiaju', 'age': 31}

成員資格in
在字典中查找的,而不是值
在列表中查找的是,而不是索引

'''
將字符串"beyond"賦給一個空列表中索引為15的元素
這顯然不可能,因為沒有這樣的元素
除非首先初始化列表
'''
x = []
x[15] = "beyond"#報錯
#改正:初始化列表y
y = [None] * 16
y[15] = "beyond"
y#結果為:[None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, 'beyond']'''
將字符串"beyond"賦給一個空字典的鍵15
'''
z = {}
z[15] = "beyond"
z#結果為:{15: 'beyond'}

將字符串格式設置功能用于字典

format_map,通過一個映射來提供所需的信息

phone = {"yanyu":"1512369","jiaju":'147852','jiaqiang':"789654"}
"jiaju's phone number is {jiaju}.".format_map(phone)#結果為:"jiaju's phone number is 147852."

可指定任意數量的轉換說明符,條件是所有的字段名都是包含在字典中的鍵

template = '''<html>
<head><title>{title}</title></head> 
<body> 
<h1>{title}</h1> 
<p>{text}</p>
</body>''' data = {'title': 'My Home Page', 'text': 'Welcome to my home page!'} 
print(template.format_map(data)) #結果為:
<html> 
<head><title>My Home Page</title></head> 
<body> 
<h1>My Home Page</h1> 
<p>Welcome to my home page!</p> 
</body>

字典方法

1,clear,刪除所有的字典項,什么都不返回(或者說返回None)

d = {}
d['name'] = "beyond"
d['age'] = 31
d#結果為:{'name': 'beyond', 'age': 31}
Y = d.clear()
d#結果為:{}
print(Y)#結果為:None

x和y最初都指向同一個字典,將一個空字典賦給x來“清空”它,這對y沒有任何影響,它依然指向原來的字典
要刪除原來字典的所有元素,必須使用clear,這樣做,y也將是空的

x = {}
y = x
x['key'] = 'value'
y#結果為:{'key': 'value'}
x = {}
x#結果為:{}
y#結果為:{'key': 'value'}
x = {}
y = x
x['key'] = 'value'
y#結果為:{'key': 'value'}
x.clear()
x#結果為:{}
y#結果為:{}

2,copy,返回一個新字典,其包含的鍵-值對與原來的字典相同

(這個方法執行的是淺復制,因為值本身是原件,而非副本)
原件x,副本y,替換副本中的值,原件不受影響修改副本中的值,原件會發生變化,因為原件指向的也是被修改的值

x={'name':'yanyu','habby':['eat','drink','sing']}
y = x.copy()
y['name'] = "huangjiaju"#替換
y['habby'].remove('eat')#修改
y#結果為:{'name': 'huangjiaju', 'habby': ['drink', 'sing']}
x#結果為:{'name': 'yanyu', 'habby': ['drink', 'sing']}

為避免這種問題,一種辦法是執行深復制,即同時復制值及其包含的所有值
可使用模塊copy中的函數deepcopy
d為原件,c為淺復制,C為深復制

淺復制:替換原件不受影響,修改(append向后追加為修改的一種)原件會受影響
深復制:與原件相互獨立,與對原件操作無任何影響

from copy import deepcopy 
d = {} 
d['names'] = ['yanyu', 'beyond'] 
c = d.copy() 
C = deepcopy(d) 
d['names'].append('Huangjiaju') 
c#結果為: {'names': ['yanyu', 'beyond', 'Huangjiaju']}
C#結果為:{'names': ['yanyu', 'beyond']}
d#結果為:{'names': ['yanyu', 'beyond', 'Huangjiaju']}

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

{}.fromkeys(['name', 'age'])#結果為:{'name': None, 'age': None}

也可以直接對dict調用方法fromkeys

dict.fromkeys(['name', 'age'])#結果為:{'name': None, 'age': None}

也可提供特定的值

dict.fromkeys(['name', 'age'], '(unknown)')#結果為:{'name': '(unknown)', 'age': '(unknown)'}

4,get,為訪問字典項提供了寬松的環境

如果你試圖訪問字典中沒有的項,將引發錯誤;而使用get不會這樣

d = {}
d['names'] = "beyond"
print(d['name'])#結果為:報錯 訪問不存在的鍵
print(d.get('name'))#結果為:None  沒有引發異常,而是返回None
d.get('name',"errorover")#結果為:errorover  沒有引發異常,而是返回指定的錯誤信息
d.get("names")#結果為:'beyond'

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

d = {'Question': 'Do you like beyond?', 'Answer': 'Yes', 'Sure?': 666} 
d.items()#結果為:dict_items([('Question', 'Do you like beyond?'), ('Answer', 'Yes'), ('Sure?', 666)])

返回值屬于一種名為字典視圖的特殊類型dict_items

確定其長度以及對其執行成員資格檢查

d = {'Question': 'Do you like beyond?', 'Answer': 'Yes', 'Sure?': 666} 
it = d.items()
len(it)#結果為:3
('Sure?', 666) in it#結果為:True

視圖的一個優點是不復制,它們始終是底層字典的反映,本源和視圖是一致的,操作視圖,本源也會跟著操作

d = {'Question': 'Do you like beyond?', 'Answer': 'Yes', 'Sure?': 666} 
it = d.items()
d['Sure?'] = 0
('Sure?',666) in it#結果為:False
d['Sure?'] = 1
('Sure?',1) in it#結果為:True

將字典項復制到列表中

d = {'Question': 'Do you like beyond?', 'Answer': 'Yes', 'Sure?': 666} 
list(d.items())#結果為:[('Question', 'Do you like beyond?'), ('Answer', 'Yes'), ('Sure?', 666)]

6,keys,返回一個字典視圖,其中包含指定字典中的鍵

d = {'Question': 'Do you like beyond?', 'Answer': 'Yes', 'Sure?': 666}
d.keys()#結果為:dict_keys(['Question', 'Answer', 'Sure?'])

7,pop,可用于獲取與指定鍵相關聯的,并將該鍵-值對從字典中刪除

d = {'x': 1, 'y': 2} 
d.pop('x') #結果為:1 
d #:結果為:{'y': 2}

8,popitem,隨機地彈出一個字典項

方法popitem類似于list.pop,但list.pop彈出列表中的最后一個元素,而popitem隨機地彈出一個字典項,因為字典項的順序是不確定的,沒有“最后一個元素”的概念

d = {'Question': 'Do you like beyond?', 'Answer': 'Yes', 'Sure?': 666}
d.popitem()#結果為:('Sure?', 666)
d#結果為:{'Question': 'Do you like beyond?', 'Answer': 'Yes'}

字典沒有與在列表末尾添加一個元素(append)對應的方法
這是因為字典是無序的,類似的方法毫無意義

9,setdefault,通過鍵獲取相關聯的值,若不包含指定的鍵,則自動添加指定的鍵值對

指定的鍵不存在時,setdefault返回指定的值并相應地更新字典
指定的鍵存在,就返回其值,并保持字典不變
與get一樣,值是可選的,如下的no find和NO;如果沒有指定,默認為None

d = {} 
d.setdefault('name', 'no find') #結果為:'no find' 
d #:結果為:{'name': 'no find'}d['name'] = 'beyond' 
d.setdefault('name', 'NO') #結果為:'beyond' 
d #:結果為:{'name': 'beyond'}print(d.setdefault('age'))#結果為:None
d#結果為:{'name': 'beyond', 'age': None}   不存在即添加

10,update,使用一個字典中的項來更新另一個字典

對于通過參數提供的字典,將其項添加到當前字典中
如果當前字典包含鍵相同的項,就替換它

 d = { 
'title': 'Python Web Site', 
'url': 'http://www.python.org', 
'changed': 'Mar 14 22:09:15 MET 2021' 
}
x = {'title': 'Python Language Website'} 
d.update(x) 
d#結果為:{'title': 'Python Language Website', 'url': 'http://www.python.org', 'changed': 'Mar 14 22:09:15 MET 2021'}

11,values,返回一個由字典中的值組成的字典視圖

不同于方法keys,方法values返回的視圖可能包含重復的值

d = {} 
d[1] = 1 
d[2] = 2 
d[3] = 3 
d[4] = 1 
d.values() #結果為:dict_values([1, 2, 3, 1])

要對字典執行字符串格式設置操作,不能使用format和命名參數,而必須使用format_map

本章節介紹的新函數

函數描述
dict(seq)從鍵-值對、映射或關鍵字參數創建字典

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

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

相關文章

利用梯度下降法求解一元線性回歸和多元線性回歸

文章目錄原理以及公式【1】一元線性回歸問題【2】多元線性回歸問題【3】學習率【4】流程分析&#xff08;一元線性回歸&#xff09;【5】流程分析&#xff08;多元線性回歸&#xff09;歸一化原理以及每種歸一化適用的場合一元線性回歸代碼以及可視化結果多元線性回歸代碼以及可…

linux x64 asm 參數傳遞,NASM匯編學習系列(1)——系統調用和參數傳遞

0. 說明本學習系列代碼幾乎完全摘自&#xff1a;asmtutor.com&#xff0c;如果英文可以的(也可以用谷歌瀏覽器翻譯看)&#xff0c;可以直接看asmtutor.com上的教程系統環境搭建&#xff1a;(我用的是ubuntu18.04.4 server&#xff0c;安裝gcc、g)sudo apt install nasmsudo apt…

Javascript之創建對象(原型模式)

我們創建的每個函數都有一個prototype(原型)屬性&#xff0c;這個屬性是一個指針&#xff0c;指向一個對象&#xff0c;它的用途是包含可以有特定類型的所有實例共享的屬性和方法。 prototype就是通過構造函數而創建的那個對象的原型對象。使用原型的好處就是可以讓所有對象實例…

treeset java_Java TreeSet pollLast()方法與示例

treeset javaTreeSet類pollLast()方法 (TreeSet Class pollLast() method) pollLast() method is available in java.util package. pollLast()方法在java.util包中可用。 pollLast() method is used to return the last highest element and then remove the element from thi…

第五章 條件、循環及其他語句

第五章 條件、循環及其他語句 再談print和import print現在實際上是一個函數 1&#xff0c;打印多個參數 用逗號分隔&#xff0c;打印多個表達式 sep自定義分隔符&#xff0c;默認空格 end自定義結束字符串&#xff0c;默認換行 print("beyond",yanyu,23)#結果為…

兩種方法將Android NDK samples中hello-neon改成C++

一、第一種方法&#xff1a;1.修改helloneon.c 中代碼 a.將 char* str; 改為 char str[512] {0}; b.將 asprintf(&str, "FIR Filter benchmark:\nC version : %g ms\n", time_c); 改為 sprintf(str, "FIR Filter benchmark:\nC ve…

【視覺項目】【day6】8.26關于matchTemplate()以及NCC的思考整理

NCC與matchTemplate()函數中match_method TM_CCOEFF_NORMED是否一樣&#xff1f; 先看公式&#xff1a; TM_CCOEFF_NORMED NCCTM_CCOEFF_NORMED:歸一化的相關性系數匹配方法 NCC:normalized cross correlation:歸一化互相關系數 公式是一樣的。 參考&#xff1a; 模板匹配的幾…

linux待機流程,Linux睡眠喚醒機制--Kernel態

一、對於休眠(suspend)的簡單介紹 在Linux中,休眠主要分三個主要的步驟: 1) 凍結用戶態進程和內核態任務2) 調用注冊的設備的suspend的回調函數, 順序是按照注冊順序3) 休眠核心設備和使CPU進入休眠態, 凍結進程是內核把進程列表中所有的進程的狀態都設置為停止,並且保存下…

strictmath_Java StrictMath log1p()方法與示例

strictmathStrictMath類log1p()方法 (StrictMath Class log1p() method) log1p() method is available in java.lang package. log1p()方法在java.lang包中可用。 log1p() method is used to return (the logarithm of the sum of the given argument and 1 like log(1d) in th…

第六章 抽象

第六章 抽象 自定義函數 要判斷某個對象是否可調用&#xff0c;可使用內置函數callable import math x 1 y math.sqrt callable(x)#結果為&#xff1a;False callable(y)#結果為&#xff1a;True使用def&#xff08;表示定義函數&#xff09;語句&#xff0c;來定義函數 …

HTTP 狀態代碼

如果向您的服務器發出了某項請求要求顯示您網站上的某個網頁&#xff08;例如&#xff0c;當用戶通過瀏覽器訪問您的網頁或在 Googlebot 抓取該網頁時&#xff09;&#xff0c;那么&#xff0c;您的服務器會返回 HTTP 狀態代碼以響應該請求。 此狀態代碼提供了有關請求狀態的信…

TensorFlow的可訓練變量和自動求導機制

文章目錄一些概念、函數、用法TensorFlow實現一元線性回歸TensorFlow實現多元線性回歸一些概念、函數、用法 對象Variable 創建對象Variable&#xff1a; tf.Variable(initial_value,dtype)利用這個方法&#xff0c;默認整數為int32&#xff0c;浮點數為float32&#xff0c;…

linux samba安裝失敗,用aptitude安裝samba失敗

版本&#xff1a;You are using Ubuntu 10.04 LTS- the Lucid Lynx - released in April 2010 and supported until April 2013.root下執行aptitude install sambaReading package lists... DoneBuilding dependency treeReading state information... DoneReading extended st…

django第二個項目--使用模板做一個站點訪問計數器

上一節講述了django和第一個項目HelloWorld&#xff0c;這節我們講述如何使用模板&#xff0c;并做一個簡單的站點訪問計數器。 1、建立模板 在myblog模塊文件夾&#xff08;即包含__init__.py的文件夾)下面新建一個文件夾templates&#xff0c;用于存放HTML模板&#xff0c;在…

strictmath_Java StrictMath log10()方法與示例

strictmathStrictMath類log10()方法 (StrictMath Class log10() method) log10() method is available in java.lang package. log10()方法在java.lang包中可用。 log10() method is used to return the logarithm of the given (base 10) of the given argument in the method…

30、深入理解計算機系統筆記,并發編程(concurrent)(2)

1、共享變量 1&#xff09;線程存儲模型 線程由內核自動調度&#xff0c;每個線程都有它自己的線程上下文&#xff08;thread context&#xff09;&#xff0c;包括一個惟一的整數線程ID&#xff08;Thread ID,TID&#xff09;&#xff0c;棧&#xff0c;棧指針&#xff0c;程序…

PostgreSQL在何處處理 sql查詢之十三

繼續&#xff1a; /*--------------------* grouping_planner* Perform planning steps related to grouping, aggregation, etc.* This primarily means adding top-level processing to the basic* query plan produced by query_planner.** tuple_fraction i…

【視覺項目】基于梯度的NCC模板匹配代碼以及效果

文章目錄流程分析工程代碼【1】NCC代碼【Ⅰ】sttPxGrdnt結構體【Ⅱ】sttTemplateModel模板結構體【Ⅲ】calcAccNCC計算ncc系數函數【Ⅳ】searchNcc NCC模板匹配函數【Ⅴ】searchSecondNcc 二級搜索&#xff1a;在某一特定點周圍再以步進為1搜索【2】測試圖轉外輪廓【Ⅰ】孔洞填…

第七章 再談抽象

第七章 再談抽象 對象魔法 多態&#xff1a;可對不同類型的對象執行相同的操作&#xff0c;而這些操作就像“被施了魔法”一樣能夠正常運行。(即&#xff1a;無需知道對象的內部細節就可使用它)&#xff08;無需知道對象所屬的類&#xff08;對象的類型&#xff09;就能調用其…

c語言math乘法,JavaScript用Math.imul()方法進行整數相乘

1. 基本概念Math.imul()方法用于計算兩個32位整數的乘積&#xff0c;它的結果也是32位的整數。JavaScript的Number類型同時包含了整數和浮點數&#xff0c;它沒有專門的整型和浮點型。因此&#xff0c;Math.imul()方法能提供類似C語言的整數相乘的功能。我們將Math.imul()方法的…