FishC筆記 26 講 字典 當索引不好用時2

2021-07-28 16:10:32 字數 3045 閱讀 3009

本期內容詳解:

1、dict()是乙個工廠函式,呼叫後會生成該型別的例項

2、字典的一種內建方法:dict1.fromkeys(s[,v])

3、訪問字典的方法:

1)dict1.keys()、dict1.value()、dict1.items()(返回每一項)

2)dict1.get(),對應鍵的值不存在的話返回乙個none,這樣程式就不會報錯

3)key in dict1:查詢的是鍵,而不是值

4)dict1.clear():清空字典,不建議使用直接賦空值的方法:dict1 = {}

例如:

>>> a =   

>>> b = a

>>> a = {}

>>> b

>>> a

{}

5)dict1.copy():淺拷貝

例如:

>>> a =   

>>> b = a.copy()

>>> c = a

>>> c[4] = 'four'

>>> c

>>> a

>>> b

6)dict1.pop():給定鍵彈出相應值

7)dict1.popitem():給定鍵彈出相應項(包括鍵和值)

8)dict1.setdefault():找不到給定鍵對應的值話會自動在字典中建立乙個基於該鍵的項(區別於dict1.get()的結果)

9)dict1.update():根據乙個字典或對映關係去更新另乙個字典

例如以下用法(結果類似於在字典中新增項或更新已存在鍵對應的值):

>>> a  

>>> d =

>>> a.update(d)

>>> a

python的字典是否支援一鍵(key)多值(value)?

在字典中,如果試圖為乙個不存在的鍵(key)賦值會怎樣?

答:會自動建立對應的鍵(key)並新增相應的值(value)進去。

成員資格操作符(in和not in)可以檢查乙個元素是否存在序列中,當然也可以用來檢查乙個鍵(key)是否存在字典中,那麼請問哪種的檢查效率更高些?為什麼?

答:在字典中檢查鍵(key)是否存在比在序列中檢查指定元素是否存在更高效。因為字典的原理是使用雜湊演算法儲存,一步到位,不需要使用查詢演算法進行匹配,因此時間複雜度是o(1),效率非常高。

python對鍵(key)和值(value)有沒有型別限制?

答:python對鍵的要求相對要嚴格一些,要求它們必須是可雜湊(hash)的物件,不能是可變型別(包括變數、列

表、字典本身等)。

但是python對值是沒有任何限制的,它們可以是任意的python物件。

如果不清楚雜湊原理以及字典的存放原理的童鞋,推薦閱讀下小甲魚幫你整理的這篇文章:你知道python的字典

(dict)是如何儲存的嗎?(

請目測下邊**執行後,字典dict1的內容是什麼?

>>> dict1.fromkeys((1, 2, 3), ('one', 'two', 'three'))   

>>> dict1.fromkeys((1, 3), '數字')

答:執行完成後,字典dict1的內容是:

這裡要注意的是,fromkeys方法是直接建立乙個新的字典,不要試圖使用它來修改乙個原有的字典,因為它會直接無情的用把整個字典給覆蓋掉。

如果你需要將字典dict1 = 拷貝到dict2,你應該怎麼做?

答:可以利用字典的copy()方法:dict2 = dict1.copy(),在其他語言轉移到python小夥伴們剛開始可能會習慣性的直接用賦值的方法(dict2 = dict1),這樣子做在python中只是將物件的引用拷貝過去而已(如筆記中提到的例子)。

嘗試編寫乙個使用者登入程式(這次嘗試將功能封裝成函式),程式實現如圖:

|--- 新建使用者:n/n ---|

|--- 登入帳號:e/e ---|

|--- 退出程式:q/q ---|

|--- 請輸入指令**:''')

if key == 'n'

or key == 'n':

temp_name = input('請輸入使用者名稱:')

while temp_name in dict1:

temp_name = input('此使用者名稱已經被使用,請重新輸入:')

temp_password = input('請輸入密碼:')

dict1[temp_name] = temp_password

print('註冊成功,趕緊試試登入吧^_^')

continue

elif key == 'e'

or key == 'e':

temp_name = input('請輸入使用者名稱:')

while temp_name not

in dict1:

temp_name = input('您輸入的使用者名稱不存在,請重新輸入:')

temp_password = input('請輸入密碼:')

while temp_password != dict1[temp_name]:

temp_password = input('密碼錯誤,請重新輸入:')

print('歡迎進入系統,請點右上角的x結束程式!')

continue

elif key == 'q'

or key == 'q':

break

load()

FishC筆記 16 講 序列,序列

本期內容詳解 列表 元組和字串的共同點 一些重要的bif 1 list 把乙個可迭代的物件轉換為列表 2 tuple iterable 把乙個可迭代的物件轉化為元組 3 str obj 把obj物件轉化為字串 4 max min 返回序列或者引數集合中的最大或最小值 5 sum iterable s...

字典 當索引不好用時

字典是python中唯一內建的對映型別。字典中的值沒有特殊的順序,但是都儲存在乙個特定的鍵 key 下。鍵可以是數字 字串甚至是元組。字典中的鍵是唯一的 其他型別的對映也是如此 而值並不唯一 可以用dict函式來建立字典 items d dict items print d 字典裡的儲存是沒有順序的...

FishC筆記 18 講 函式 靈活即強大

本期內容詳解 1 分清楚形參和實參 2 函式文件 是函式的一部分,於解釋不同,使用help 函式名 或者 函式名 doc 可以檢視到 3 關鍵字引數 在乙個函式的引數較多的時候作用比較明顯 給引數的名字下定義,例如 def f name,words 如下兩種引用的方法是等價的 f a,b f wor...