1. 程式人生 > >python全棧開發-第五天 python_day_5

python全棧開發-第五天 python_day_5

今日大綱:

1. dict 用大括號{} 括起來. 內部使用key:value的形式來儲存資料 {'jay':'周杰倫', "jj":'林俊杰'} 注意:字典的key必須是可雜湊的. 不可變的, value 沒有限制 不是按照我們儲存的順序儲存的, 無序的 2. 增刪改查

  1. dict[不存在的key] = value, setdefault()
  2. pop(key). del dict[key]. popitem(), clear()
  3. dict[存在的key] = 新值, d1.update(d2) 把d2的k-v更新到d1中
  4. get(key, 預設值), setdefault(), dict[key]

3. 字典的常用方法

  1. keys() 返回所有字典的key的集合(高仿列表)
  2. values() 返回所有的value的集合
  3. items() 返回鍵值對. 元組

解構: a, b = (1, 2)

4. 字典的巢狀

05. 萬惡之源-基本資料型別(dict) 本節主要內容:

  1. 字典的簡單介紹
  2. 字典增刪改查和其他操作
  3. 字典的巢狀

⼀. 字典的簡單介紹 字典(dict)是python中唯⼀的⼀個對映型別.他是以{ }括起來的鍵值對組成. 在dict中key是 唯⼀的. 在儲存的時候, 根據key來計算出⼀個記憶體地址. 然後將key-value儲存在這個地址中. 這種演算法被稱為hash演算法, 所以, 切記, 在dict中儲存的key-value中的key'必須是可hash的, 如果你搞不懂什麼是可雜湊, 暫時可以這樣記, 可以改變的都是不可雜湊的, 那麼可雜湊就意味著不可變. 這個是為了能準確的計算記憶體地址⽽規定的. 已知的可雜湊(不可變)的資料型別: int, str, tuple, bool 不可雜湊(可變)的資料型別: list, dict, set 語法 : {key1: value1, key2: value2....} 注意: key必須是不可變(可雜湊)的. value沒有要求.可以儲存任意型別的資料

dic = {'jay':"周杰倫", "jj":"林俊杰", "eason":"陳奕迅"}
print(dic)
dic = {1: "馬化騰", False:"阿里巴巴", "sylar":"帥的不行不行的", (1, "哈哈"): "元組", ["吼吼"]:"列表"}
print(dic)

dict儲存的資料不是按照我們新增進去的順序儲存的. 是按照hash表的順序儲存的. ⽽hash表 不是連續的. 所以不能進⾏切片⼯作. 它只能通過key來獲取dict中的資料 ⼆. 字典的增刪改查和其他相關操作

1. 增加

# 字典的相關操作
# 增加
dict = {"name":"corn","age":21,"sex":"男","hobby":"pplay game","money":1000}
dict["sex"] = "男"  #  增加 如果key重複了. 會替換掉原來的value
dict.setdefault("hobby","play game") # 如果字典中已經包含了這個key. 不再繼續儲存

2. 刪除

#pop
dic = {"牌牌":"你去哪裡了", "曉雪":"你快回來.", "雪雪": "又走了"}
ret = dic.pop("曉雪") # 刪除一個元素. 返回這個元素的value值
print(ret)
del dic["雪雪"]
#del
ret = dic.popitem() # 返回給你的是一個元組.
print(ret)
print(dic)

3. 修改

#1
dic = {"id":1, 'name':'李嘉誠', 'money':10000000}
# 李嘉誠賠了500
dic['money'] = dic['money'] - 500   # 用key去修改
print(dic)
#2
dic1 = {"李晨":"范冰冰", "鄧超":"孫儷", "王祖藍":"李亞男"}
dic2 = {"李晨":"張馨予", "鄭凱":"baby", "王寶強":"馬蓉"}
dic1.update(dic2)   #  把dic2中的內容更新到 dic1 , 如果存在了key. 替換. 如果不存在,新增
print(dic1)
print(dic2)

4. 查詢 *查詢⼀般⽤key來查詢具體的資料

#1
dic = {"及時雨":"宋江", "小李廣":"花榮", "黑旋風":"李逵", "易大師":"劍聖"}
dic["大寶劍"] = "蓋倫"   # 新增
dic["及時雨"] = "天老爺" # 修改
print(dic["易大師是個腦殘"])   # 查詢, 如果key不存在,報錯
print(dic.get("易大師", "餘小C"))   # 如果key不存在. 返回None
get()
#可以通過key來獲取value的值. 那麼如果key不存在. 返回None.
#可以給出一個預設值. 當key不存在的時候返回預設值
#2
dic = {"及時雨":"宋江", "易大師":"劍聖"}
dic.setdefault("及時雨", "諾克薩斯")    # 可以幫我們新增
print(dic)
ret = dic.setdefault("及時雨123", "hello")
print(ret)
print(dic)
#3
#1. 首先判斷原來的字典中有沒有這個key . 如果沒有. 執行新增
#2. 用這個key去字典中查詢, 返回查到的結果
dic = {"及時雨":"宋江", "易大師":"劍聖"}
ret = dic.setdefault("及時雨", "西門慶")
print(dic)  
print(ret)  

5. 其他相關操作

#1
dic = {"及時雨":"宋江", "易大師":"劍聖", "維恩":"暗影獵手"}
print(dic.keys())   # 拿到所有的key, 返回key的集合. 像是列表. 但是不是列表
for key in dic.keys():  # 可以進行迭代迴圈
    print(key)
print(dic.values())
for value in dic.values():
    print(value)
#2
dic = {"及時雨":"宋江", "易大師":"劍聖", "維恩":"暗影獵手"}
print(dic.items())  # 拿到鍵值對
# 遍歷dict
for k, v in dic.items():
    print(k , v)
for k, v in dic.items():
     # = item # (key, value)
    # print(item) # (key, value)
    print(k,v)
# 解構 . 解包
a, b = (1, 2)
print(a)
print(b)

a, b, c = ("馬化騰", "馬雲", "馬良")
print(b)

a, b = [1, 2]
print(a, b)

三. 字典的巢狀.

dic = {
    "name":"汪峰",
    "age": 58,
    "wife":{
        "name":"國際章",
        "salary": 180000,
        "age": 37
    },
    "children":[
        {"name":"老大", "age": 18},
        {"name":"老二", "age": 118}
    ]
}
print(dic["children"][1]["age"])

print(dic["wife"]['salary'])

四.字典的for迴圈.

dic = {1: 'a', 2:'b', 3:'c'}
for a in dic:   # 直接迴圈字典.拿到的是key

    print(a)
    print(dic[a])

 作業:

一,有如下變數(tu是個元祖),請實現要求的功能
tu = ("alex", [11, 22, {"k1": 'v1', "k2": ["age", "name"], "k3": (11, 22, 33)}, 44])
#a.講述元組的特性
#元組:不可變的列表.⼜被成為只讀列表
# b. 請問tu變數中的第一個元素 "alex" 是否可被修改?
#不可以
# c. 請問tu變數中的"k2"對應的值是什麼型別?是否可以被修改?如果可以,請在其中新增一個元素 "Seven"
#列表 可以被修改
tu[1][2]["k2"].append("Seven")
print(tu)
# d. 請問tu變數中的"k3"對應的值是什麼型別?是否可以被修改?如果可以,請在其中新增一個元素 "Seven"
#元組 不可以被修改
二, 字典dic, dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]}
dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]}
# a.請迴圈輸出所有的key
print(dic.keys())
# b.請迴圈輸出所有的value
print(dic.values())
# c.請迴圈輸出所有的key和value
for a,b in dic.items():
    print(a,b)
# d.請在字典中新增一個鍵值對,"k4": "v4",輸出新增後的字典
dic["k4"] = "v4"
print(dic)
# e.請在修改字典中"k1"對應的值為"alex",輸出修改後的字典
dic["k1"] = "alex"
print(dic)
# f.請在k3對應的值中追加一個元素44,輸出修改後的字典
dic["k3"].append(44)
print(dic)
# g.請在k3對應的值的第1個位置插入個元素18,輸出修改後的字典
dic["k3"].insert(1,18)
print(dic)
三.
av_catalog = {
    "歐美":{
        "www.youporn.com": ["很多免費的,世界最大的","質量一般"],
        "www.pornhub.com": ["很多免費的,也很大","質量比yourporn高點"],
        "letmedothistoyou.com": ["多是自拍,高質量圖片很多","資源不多,更新慢"],
        "x-art.com":["質量很高,真的很高","全部收費,屌絲請繞過"]
    },
    "日韓":{
        "tokyo-hot":["質量怎樣不清楚,個人已經不喜歡日韓範了","verygood"]
    },
    "大陸":{
        "1024":["全部免費,真好,好人一生平安","伺服器在國外,慢"]
    }
}
# a,給此 ["很多免費的,世界最大的","質量一般"]列表第二個位置插入一個元素:'量很大'。
av_catalog["歐美"]["www.youporn.com"].insert(2,"量很大")
print(av_catalog)
# b,將此 ["質量很高,真的很高","全部收費,屌絲請繞過"]列表的 "全部收費,屌絲請繞過" 刪除。
av_catalog["歐美"]["x-art.com"].remove("全部收費,屌絲請繞過")
print(av_catalog)
# c,在此 ["質量很高,真的很高","全部收費,屌絲請繞過"]列表中新增"金老闆最喜歡這個"。
av_catalog["歐美"]["x-art.com"].append("金老闆最喜歡這個")
print(av_catalog)
# d,將此["質量怎樣不清楚,個人已經不喜歡日韓範了","verygood"]列表的 "verygood"全部變成大寫。
av_catalog["日韓"]["tokyo-hot"][1] = av_catalog["日韓"]["tokyo-hot"][1].upper()
print(av_catalog)
# e,給'大陸' 對應的字典新增一個鍵值對 '1048' :['一天就封了']
av_catalog["大陸"]["1024"] = "一天就封了"
print(av_catalog)
# f,刪除此"letmedothistoyou.com": ["多是自拍,高質量圖片很多","資源不多,更新慢"]鍵值對。
a = av_catalog["歐美"].pop("letmedothistoyou.com")
print(av_catalog)
# g,給此["全部免費,真好,好人一生平安","伺服器在國外,慢"]列表的第一個元素,加上一句話:'可以爬下來'
av_catalog["大陸"]["1024"].insert(1,"可以爬下來")
print(av_catalog)
四、有字串 "k:1|k1:2|k2:3|k3:4" 處理成字典 {'k':1,'k1':2....}  (升級題)
s = "k:1|k1:2|k2:3|k3:4"
dic = {}
count = 0
s1 = s.split("|")
while count <= 3:
    s1[count] = s1[count].split(":")
    count += 1
    for i in s1:
        dic[i[0]] = int(i[1])
print(dic)
五、元素分類
有如下值li= [11,22,33,44,55,66,77,88,99,90],將所有大於 66 的值儲存至字典的第一個key中,將
小於 66 的值儲存至第二個key的值中。即: {'k1': 大於66的所有值列表, 'k2': 小於66的所有值列表}
li= [11,22,33,44,55,66,77,88,99,90]
l = []
l1 = []
dict = {}
for i in li:
    if int(i) > 66:
        l.append(i)
    elif int(i) < 66:
        l1.append(i)
    dict["k1"] = l
    dict["k2"] = l1
print(dict
六、輸出商品列表,使用者輸入序號,顯示使用者選中的商品(升級題)
# 商品列表:
goods = [{"name": "電腦", "price": 1999},
         {"name": "滑鼠", "price": 10},
         {"name": "遊艇", "price": 20},
         {"name": "美女", "price": 998}, ]
# 要求:
# 1:頁面顯示序號 + 商品名稱 + 商品價格,如:
#1 電腦 1999
#2 滑鼠 10
# …
a = 0
count = 1
dic = {}
while count < 5:
    print("%s  %s  %s" % (count,goods[a]["name"],goods[a]["price"]))
    dic[count] = goods[a]
    count += 1
    a += 1
# 2:使用者輸入選擇的商品序號,然後列印商品名稱及商品價格
while 1:
    s = input("請你輸入選擇的商品的序號:")
    print("%s  %s" % (dic[int(s)]["name"],dic[int(s)]["price"]))
# 3:如果使用者輸入的商品序號有誤,則提示輸入有誤,並重新輸入。
while 1:
    s = input("請你輸入選擇的商品的序號:")
    if int(s) > int(4):
        print("輸入有誤,請重新輸入")
    else:
        print("%s  %s" % (dic[int(s)]["name"],dic[int(s)]["price"]))

# 4:使用者輸入Q或者q,退出程式。
while 1:
    s = input("請你輸入選擇的商品的序號(按Q退出程式):")
    if s.upper() == "Q":
        break
    elif int(s) > int(4):
        print("輸入有誤,請重新輸入")
    else:
        print("%s  %s" % (dic[int(s)]["name"],dic[int(s)]["price"]))