成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

Python字典dict

dict


Python內置了字典:dict的支持,dict全稱dictionary,在其他語言中也稱為map,使用鍵-值(key-value)存儲,具有極快的查找速度。Python中的唯一一種映射類型。

創(chuàng)新互聯(lián)是一家專注于成都網站設計、成都網站制作與策劃設計,伽師網站建設哪家好?創(chuàng)新互聯(lián)做網站,專注于網站建設十年,網設計領域的專業(yè)建站公司;建站業(yè)務涵蓋:伽師等地區(qū)。伽師做網站價格咨詢:028-86922220

舉個例子,假設要根據(jù)同學的名字查找對應的成績,如果用列表(list)實現(xiàn),需要兩個list:

names = ['Michael', 'Bob', 'Tracy']
scores = [95, 75, 85]

給定一個名字,要查找對應的成績,就先要在names中找到對應的位置,再從scores取出對應的成績,list越長,耗時越長。

如果用dict實現(xiàn),只需要一個“名字”-“成績”的對照表,直接根據(jù)名字查找成績,無論這個表有多大,查找速度都不會變慢。用Python寫一個dict如下:

>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
>>> d['Michael']
95

為什么dict查找速度這么快?

  • 因為dict的實現(xiàn)原理和查字典是一樣的。假設字典包含了1萬個漢字,我們要查某一個字,一個辦法是把字典從第一頁往后翻,直到找到我們想要的字為止,這種方法就是在list中查找元素的方法,list越大,查找越慢。
  • 第二種方法是先在字典的索引表里(比如部首表)查這個字對應的頁碼,然后直接翻到該頁,找到這個字。無論找哪個字,這種查找速度都非???,不會隨著字典大小的增加而變慢。
  • dict就是第二種實現(xiàn)方式,給定一個名字,比如'Michael',dict在內部就可以直接計算出Michael對應的存放成績的“頁碼”,也就是95這個數(shù)字存放的內存地址,直接取出來,所以速度非??臁?/li>
  • 你可以猜到,這種key-value存儲方式,在放進去的時候,必須根據(jù)key算出value的存放位置,這樣,取的時候才能根據(jù)key直接拿到value。

dict的key必須是不可變對象

dict可以用在需要高速查找的很多地方,在Python代碼中幾乎無處不在,正確使用dict非常重要,需要牢記的第一條就是dict的key必須是不可變對象。

這是因為dict根據(jù)key來計算value的存儲位置,如果每次計算相同的key得出的結果不同,那dict內部就完全混亂了。這個通過key計算位置的算法稱為哈希算法(Hash)。

要保證hash的正確性,作為key的對象就不能變。在Python中,字符串、整數(shù)等都是不可變的,因此,可以放心地作為key。而list是可變的,就不能作為key:

>>> key = [1, 2, 3]
>>> d[key] = 'a list'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'

list與dict


和list比較,dict有以下幾個特點:

  • 查找和插入的速度極快,不會隨著key的增加而變慢;
  • 需要占用大量的內存,內存浪費多。

而list相反:

  • 查找和插入的時間隨著元素的增加而增加;
  • 占用空間小,浪費內存很少。
  • 所以,dict是用空間來換取時間的一種方法。

dict的使用


#創(chuàng)建字典 Key:Value 映射類型 Python中的唯一一種映射類型 雙向鏈表

dicts={'name':'張三','age':12}

#通過Key獲取Value值 通過部首 | 拼音檢索字的操作是一樣的 沒有索引 也沒有下表 元素是無序的

name=dicts.get('name');
print(name)

#借助for循環(huán) 遍歷 字典

for key in dicts:
    print("Keys:%s Values:%s"%(key,dicts.get(key)))
dict=dict((('name',"張三"),));
print(dict)

#字典的內置方法

#增加元素的方法 同時增加Key和Value

dicts.__setitem__('sex','男');

print(dicts)

#刪除元素的方法 通過Key刪除Value

dicts.pop('name');
print(dicts);

#清空字典元素的方法

dicts.clear();
print(dicts)

#修改字典中元素的值呢 通過Key修改Value

print(dicts['age'])

#修改年齡為歲

dicts['age']=18;
print(dicts)

#根據(jù)Key獲取value的兩種方式: get(key) dicts[key]

#如何分別去遍歷字典中的key和value
#獲取字典中的所有key 返回的類型 (列表|元組) type() 獲取該變量的數(shù)據(jù)類型 keys 元組(元組中的元素不能被修改)

keys=dicts.keys();
for key in keys:
    print("字典中的Key:%s"%key)

#獲取字典中的所有value 在字典中非常神奇的特性 在字典中Key不能重復 Value可以重復

values=dicts.items();
for item in values:
    print("Keys:%s,Value:%s"%(item[0],item[1]))
dicts.__setitem__('age','男')
print(dicts)

#如果key不存在,dict就會報錯:

>>> d['Thomas']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'Thomas'

#要避免key不存在的錯誤,有兩種辦法,一是通過in判斷key是否存在:

>>> 'Thomas' in d
False

#二是通過dict提供的get()方法,如果key不存在,可以返回None,或者自己指定的value:

>>> d.get('Thomas')
>>> d.get('Thomas', -1)
-1

注意:返回None的時候Python的交互環(huán)境不顯示結果。

請務必注意,dict內部存放的順序和key放入的順序是沒有關系的。

分享名稱:Python字典dict
文章網址:http://jinyejixie.com/article40/pdcoho.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供網頁設計公司、企業(yè)網站制作、微信公眾號、微信小程序全網營銷推廣、網站設計公司

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

外貿網站建設
北川| 洛阳市| 陆良县| 舒兰市| 郧西县| 长泰县| 司法| 西安市| 信宜市| 德安县| 塘沽区| 梁平县| 浑源县| 凭祥市| 饶河县| 永丰县| 潞西市| 榆中县| 通化县| 灵宝市| 改则县| 常州市| 宜城市| 曲麻莱县| 胶州市| 揭东县| 平江县| 拉萨市| 阿克陶县| 尚义县| 榆社县| 如皋市| 闵行区| 安达市| 敖汉旗| 麻阳| 江孜县| 杂多县| 扶绥县| 农安县| 宝鸡市|