python dict遍历_Python 容器(二):字典(Dict)
Python 容器(二):字典(Dict)
一、字典
1、定義:Python的字典數據類型是基于hash散列算法實現的,采用鍵值對(key:value)的形式,根據key的值計算value的地址,具有非??斓牟槿『筒迦胨俣?。
2、特點:
1)字典包含的元素個數不限; 2)值的類型可以是任何數據類型; 3)字典的key必須是不可變的對象,例如整數、字符串、bytes和元組,最常見的還是將字符串作為4)key。列表、字典、集合等就不可以作為key。 5)同時,同一個字典內的key必須是唯一的,但值則不必。 6)從Python3.6開始,字典是有序的。它將保持元素插入時的先后順序。
2、創建字典
# dict()函數是Python內置的創建字典的方法。 dic = {} # 創建空字典 # 直接賦值,創建字典 dic = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'} # 通過dict()創建字典一 >>> dict([('sape', 4139), ('guido', 4127), ('jack', 4098)]) {'sape': 4139, 'jack': 4098, 'guido': 4127} # 通過dict()創建字典二 >>> dict(sape=4139, guido=4127, jack=4098) {'sape': 4139, 'jack': 4098, 'guido': 4127}3、訪問字典
雖然現在3.6版本后的字典在訪問時有序了,但字典依然是集合類型,不是序列類型,因此沒有索引下標的概念,更沒有切片的說法。 但與list類似的地方是,字典采用把相應的鍵放入方括號內獲取對應值的方式取值。
>>> fruit_dic = {'name':'apple', 'color':'red', 'shape':'round', 'taste':'sweet'} >>> fruit_dic['name'] 'apple' # 如果訪問一個不存在的key >>> >>> fruit_dic['cc'] Traceback (most recent call last):File "<stdin>", line 1, in <module> KeyError: 'cc'4、增加和修改
增加就是往字典里插入新的鍵值對,修改就是給原有的鍵賦予新的值。由于一個key只能對應一個值,所有,多次對一個可以賦值,后面的值會把前面的值沖掉。
>>> fruit_dic = {'name':'apple', 'color':'red', 'shape':'round', 'taste':'sweet'} >>> fruit_dic['name'] 'apple' >>> fruit_dic['name'] = 'lemon' >>> fruit_dic['name'] 'lemon' >>> fruit_dic['name'] = 'banana' >>> fruit_dic['name'] = 'cherry' >>> fruit_dic {'color': 'red', 'taste': 'sweet', 'shape': 'round', 'name':'cherry'} # 上面字典的順序出現的不同,是因為使用的是python2.7 。 # 通過for循環來創建(更新)字典 dic = {} for i in "eafgdgd":dic[i] = ord(i) print(dic)# {'e': 101, 'a': 97, 'f': 102, 'g': 103, 'd': 100}5、 刪除字典元素、清空字典和刪除字典
>>> dic {'Name': 'Jack', 'Age': '20', 'Class': 'First', 'sex': 'male'} >>> del dic['Name'] # 刪除指定的鍵 >>> dic {'Age': '20', 'Class': 'First', 'sex': 'male'} # ------------------ >>> a = dic.pop('Class') # 彈出并返回指定的鍵。必須提供參數! >>> a 'First' >>> dic {'Name': 'Jack', 'Age': 7} # ------------------ >>> dic.clear() # 清空字典 >>> dic {} # ------------------ >>> del dic # 刪除字典本身 >>> dic Traceback (most recent call last):File "<pyshell#20>", line 1, in <module>dic NameError: name 'dic' is not defined6、字典copy
python字典的copy( )函數返回一個字典的淺復制。 使用方式 dict.copy( )
>>> dict1 = {'Name': 'Jim', 'Age':9} >>> dict2 = dict1.copy() >>> dict2 {'Age': 9, 'Name': 'Jim'}那么直接賦值和copy有什么區別呢?
dict1 = {'user':'runoob','num':[1,2,3]}dict2 = dict1 # 淺拷貝: 引用對象 dict3 = dict1.copy() # 淺拷貝:深拷貝父對象(一級目錄),子對象(二級目錄)不拷貝,還是引用# 修改 data 數據 dict1['user']='root' dict1['num'].remove(1)# 輸出結果 >>> print(dict1) {'user': 'root', 'num': [2, 3]} >>> print(dict2) {'user': 'root', 'num': [2, 3]} >>> print(dict3) {'user': 'runoob', 'num': [2, 3]}實例中 dict2 其實是 dict1 的引用(別名),所以輸出結果都是一致的,dict3 父對象進行了深拷貝,不會隨dict1 修改而修改,子對象是淺拷貝所以隨 dict1 的修改而修改。 (而且注意python的運算規律)
更多見: Python 直接賦值、淺拷貝和深度拷貝解析
7、字典(Dictionary)的 fromkeys()方法
Python 字典 fromkeys() 函數用于創建一個新字典,以序列 seq 中元素做字典的鍵,value 為字典所有鍵對應的初始值。 語法: dict.fromkeys(seq[, value])
>>> seq = ('Google', 'Runoob', 'Taobao') >>> dict = dict.fromkeys(seq) {'Google': None, 'Taobao': None, 'Runoob': None} >>> dict = dict.fromkeys(seq, 10) {'Google': 10, 'Taobao': 10, 'Runoob': 10} # fromkeys()的方法,只能賦唯一值給key。。。 >>> >>> dict = dict.fromkeys(seq,seq) >>> dict {'Google': ('Google', 'Runoob', 'Taobao'), 'Taobao': ('Google', 'Runoob', 'Taobao'), 'Runoob': ('Google', 'Runoob', 'Taobao')}8、get(key)
get(key) # 返回指定鍵的值,如果鍵不在字典中,則返回default值
>>> dic = {'Name': 'Jack', 'Age': 7, 'Class': 'First'} >>> dic.get('Name') 'Jack' # 注意name 不是Name, 所以下面的訪問不存在的name,沒有報錯,但不會顯示None >>> dic.get('name') >>> dic['name'] Traceback (most recent call last):File "<stdin>", line 1, in <module> KeyError: 'name'9、items( )、keys( )、values( )
items( ) # 以列表返回可遍歷的(鍵, 值) 元組對 keys( ) 以列表返回字典所有的鍵 values( ) 以列表返回字典所有的值
>>> dic = {'Name': 'Jack', 'Age': 7, 'Class': 'First'} >>> dic.items() dict_items([('Name', 'Jack'), ('Age', 7), ('Class', 'First')]) >>> dic.values() dict_values(['Jack', 7, 'First']) >>> dic.keys() dict_keys(['Name', 'Age', 'Class'])10、pop(key) 與popitem( )
pop(key) 刪除并返回指定key的值
>>> dic = {'Name': 'Jack', 'Age': 7, 'Class': 'First'} >>> a = dic.pop('Name') >>> dic {'Age': 7, 'Class': 'First'} >>> a 'Jack'popitem( ) 刪除并返回字典的最后一個鍵值對,不接受參數。
>>> dic = {'Name': 'Jack', 'Age': 7, 'Class': 'First'} >>> dic.popitem('Age') Traceback (most recent call last):File "<stdin>", line 1, in <module> TypeError: popitem() takes no arguments (1 given) >>> b = dic.popitem() >>> dic {'Name': 'Jack', 'Age': 7} >>> b ('Class', 'First')11、setdefault(key, default=None)
setdefault(key, default=None) 和get()類似,但如果鍵不存在于字典中,將會添加鍵并將值設為default
>>> dic = {'Name': 'Jack', 'Age': 7, 'Class': 'First'} >>> dic.setdefault('id') >>> dic {'Name': 'Jack', 'Age': 7, 'Class': 'First', 'id': None} >>> dic.setdefault('id',10) # 再次使用,改變不了鍵'id'的值了。 >>> dic {'Name': 'Jack', 'Age': 7, 'Class': 'First', 'id': None} >>> dic = {'Name': 'Jack', 'Age': 7, 'Class': 'First'} >>> dic.setdefault('id',10) 10 >>> dic {'Name': 'Jack', 'Age': 7, 'Class': 'First', 'id': 10}12、update(dict2)
update(dict2) 把字典dict2的鍵/值對更新到dict里 (在list中使用extend)
>>> dic = {'Name': 'Jack', 'Age': 7, 'Class': 'First', 'id': 10} >>> seq = {'Google': 10, 'Taobao': 10, 'Runoob': 10} >>> dic.update(seq) >>> dic {'Name': 'Jack', 'Age': 7, 'Class': 'First', 'id': 10, 'Google': 10, 'Taobao': 10, 'Runoob': 10}13、 遍歷字典
從Python3.6開始遍歷字典獲得的鍵值對是有序的!
dic = {'Name': 'Jack', 'Age': 7, 'Class': 'First'}# 1 直接遍歷字典獲取鍵,根據鍵取值 >>> dic = {'Name': 'Jack', 'Age': 7, 'Class': 'First'} >>> for key in dic: ... print(key, dic[key]) ... Name Jack Age 7 Class First# 2 利用items方法獲取鍵值,速度很慢,少用 >>> for key, value in dic.items(): ... print(key,value) ... Name Jack Age 7 Class First#3 利用keys方法獲取鍵 >>> for key in dic.keys(): ... print(key, dic[key]) ... Name Jack Age 7 Class First#4 利用values方法獲取值,但無法獲取對應的鍵。 >>> for value in dic.values(): ... print(value) ... Jack 7 First14、 利用循環構造字典
# 比較經典的一種用法 >>> dic ={} >>> for i in 'aefegd': ... dic[i] = ord(i) ... >>> dic {'a': 97, 'e': 101, 'f': 102, 'g': 103, 'd': 100}總結
以上是生活随笔為你收集整理的python dict遍历_Python 容器(二):字典(Dict)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 这是我见过最好的Flash知识介绍了!
- 下一篇: 操作系统:SSH协议知识介绍