FishC笔记—26 讲 字典:当索引不好用时2
本期內(nèi)容詳解:
1、dict()是一個工廠函數(shù),調(diào)用后會生成該類型的實例
2、字典的一種內(nèi)建方法:dict1.fromkeys(s[,v])
3、訪問字典的方法:
1)dict1.keys()、dict1.value()、dict1.items()(返回每一項)
2)dict1.get(),對應(yīng)鍵的值不存在的話返回一個None,這樣程序就不會報錯
3)key in dict1:查找的是鍵,而不是值
4)dict1.clear():清空字典,不建議使用直接賦空值的方法:dict1 = {}
例如:
5)dict1.copy():淺拷貝
例如:
6)dict1.pop():給定鍵彈出相應(yīng)值
7)dict1.popitem():給定鍵彈出相應(yīng)項(包括鍵和值)
8)dict1.setdefault():找不到給定鍵對應(yīng)的值話會自動在字典中創(chuàng)建一個基于該鍵的項(區(qū)別于dict1.get()的結(jié)果)
9)dict1.update():根據(jù)一個字典或映射關(guān)系去更新另一個字典
例如以下用法(結(jié)果類似于在字典中添加項或更新已存在鍵對應(yīng)的值):
Python的字典是否支持一鍵(Key)多值(Value)?
答:不支持,對相同的鍵再次賦值會將上一次的值直接覆蓋。
在字典中,如果試圖為一個不存在的鍵(Key)賦值會怎樣?
答:會自動創(chuàng)建對應(yīng)的鍵(Key)并添加相應(yīng)的值(Value)進去。
成員資格操作符(in和not in)可以檢查一個元素是否存在序列中,當(dāng)然也可以用來檢查一個鍵(Key)是否存在字典中,那么請問哪種的檢查效率更高些?為什么?
答:在字典中檢查鍵(Key)是否存在比在序列中檢查指定元素是否存在更高效。因為字典的原理是使用哈希算法存儲,一步到位,不需要使用查找算法進行匹配,因此時間復(fù)雜度是O(1),效率非常高。
Python對鍵(Key)和值(Value)有沒有類型限制?
答:Python對鍵的要求相對要嚴(yán)格一些,要求它們必須是可哈希(Hash)的對象,不能是可變類型(包括變量、列
表、字典本身等)。
但是Python對值是沒有任何限制的,它們可以是任意的Python對象。
如果不清楚哈希原理以及字典的存放原理的童鞋,推薦閱讀下小甲魚幫你整理的這篇文章:你知道Python的字典
(Dict)是如何存儲的嗎?(http://bbs.fishc.com/thread-45016-1-1.html)
請目測下邊代碼執(zhí)行后,字典dict1的內(nèi)容是什么?
>>> dict1.fromkeys((1, 2, 3), ('one', 'two', 'three')) >>> dict1.fromkeys((1, 3), '數(shù)字')答:執(zhí)行完成后,字典dict1的內(nèi)容是:{1: ‘?dāng)?shù)字’, 3: ‘?dāng)?shù)字’}
這里要注意的是,fromkeys方法是直接創(chuàng)建一個新的字典,不要試圖使用它來修改一個原有的字典,因為它會直接無情的用把整個字典給覆蓋掉。
如果你需要將字典dict1 = {1: ‘one’, 2: ‘two’, 3: ‘three’}拷貝到dict2,你應(yīng)該怎么做?
答:可以利用字典的copy()方法:dict2 = dict1.copy(),在其他語言轉(zhuǎn)移到Python小伙伴們剛開始可能會習(xí)慣性的直接用賦值的方法(dict2 = dict1),這樣子做在Python中只是將對象的引用拷貝過去而已(如筆記中提到的例子)。
嘗試編寫一個用戶登錄程序(這次嘗試將功能封裝成函數(shù)),程序?qū)崿F(xiàn)如圖:
總結(jié)
以上是生活随笔為你收集整理的FishC笔记—26 讲 字典:当索引不好用时2的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Blender 精确建模3D打印注意事项
- 下一篇: 数字电子技术课程设计之基于触发器的三位二