巨蟒python全棧開發-第5天 字典&集合

今日大綱:python

1.什麼是字典git

  字典是以key:value的形式來保存數據,用{}表示. 存儲的是key:value算法

2.字典的增刪改查(重點)服務器

  (1) 添加
    dic[新key] = 值多線程

    setdefault()
  (2)刪除
    pop(key)app

    del dict[key]dom

    popitem()ide

    clear()函數

  (3)修改
    dic[老key] = 新值
    d1.update(d2)   把d2的鍵值對更新到d1中
  (4)查詢
    dic[key]
    get(key, 值)   #推薦用法
    setdefault(key, value)
  (5) 遍歷,字典是一個可迭代對象this

 

3.字典的相關操做

  (1) keys()   獲取到全部的鍵的集合(高仿列表)
  (2) values()  獲取到全部的值的集合
  (3)items()   拿到全部的鍵值對  元組形式

  (4)解構:

  a,b=(1,2)

  a,b=1,2

4.字典的嵌套

  字典的嵌套. 字典套字典

5.集合(非重點),核心功能:去重複

 DAY5-基本數據類型(dict&set)

本節主要內容:

1.字典的簡單介紹

2.字典的增刪改查及其餘操做

3.字典的遍歷

4.字典的嵌套

5.set集合

 

一.字典的簡單介紹

  字典(dict)是python中惟⼀的⼀個映射類型.他是以{ }括起來的鍵值對組成. 在惟⼀的. 在保存的時候, 根據key來計算出⼀個內存地址. 而後將key-value保存這種算法被稱爲hash算法, 因此, 切記, 在dict中存儲的key-value中的key'必須若是你搞不懂什麼是可哈希, 暫時能夠這樣記, 能夠改變的都是不可哈希的, 那麼可哈希就一位這不可變,這個是 這個是爲了能準確的計算內存地址而規定的.

已知的可哈希(不可變)的數據類型: int, str, tuple, bool
不可哈希(可變)的數據類型: list, dict, set

語法 :
{key1: value1, key2: value2....}
注意: key必須是不可變(可哈希)的. value沒有要求.能夠保存任意類型的數據.

dic={}
print(type(dic)) #<class 'dict'>
(1)#查找,經過列表引入字典
lst=['周杰倫','林俊杰','蔡依林'] #lst[0]
總結:字典是自定義下標的列表

dic={'jay':'周杰倫','jj':'林俊杰','jolin':'蔡依林'}
print(dic['jay']) #查找 周杰倫
(2)修改
dic={'jay':'周杰倫','jj':'林俊杰','jolin':'蔡依林'}
dic['jay']='馬化騰' #修改鍵jay對應的值
print(dic) #結果{'jay': '馬化騰', 'jj': '林俊杰', 'jolin': '蔡依林'}
(3)應用,
在手機袋子的查找手機,經過標籤尋找
'''
字典的查找效率比較高
坑: a.字典存儲數據的時候是用hash值來存儲的,知道hash是個NB的算法就好了
b.算法不能變(python的),數據必須是不可變的(可哈希)
算法對應相同的值,對於結果
對'鍵'進行運算,計算出一個值來,下次再算,下次仍是這個值
'''
(4)
總結:
  列表是可變的,不可哈希的
  元組是不可變的,可哈希的
  字典的鍵必須是可哈希的
  print(hash(123)) #結果產生的hash值:123
  print(hash('胡辣湯'))
  print((1,2,3))
(5)
dic={'jay':'周杰倫','王力宏':['龍的傳人','惟一','改變本身'],['戰狼','戰狼2']:'武警'}
print(dic)
結果報錯:TypeError: unhashable type: 'list'
總結字典不能做爲"鍵

dict保存的數據不是按照咱們添加進去的順序保存的. 是按照hash表的順序不是連續的. 因此不能進⾏切片⼯做. 它只能經過key來獲取dict中的數據

 

二.字典的增刪改查及其餘操做

(1)
增長 dic[新鍵]=新值
dic[老鍵]=新值
dic={'意大利':'李雲龍','美國':'美國往事'}
dic['日本']='東京審判' #新key表示添加
dic['韓國']='釜山行'
dic['美國']="華爾街之狼" #更新
print(dic)

增長 setdefault(難點)
總結:
  有添加的功能,若是key是存在的,不添加
  流程:判斷你給的key是否在字典中存在了,若是已經存在了,則再也不新增,不存在,則添加
dic={'意大利':'李雲龍','美國':'美國往事'}
dic.setdefault('印度')   #只有鍵,值顯示 None
print(dic)   #結果:{'意大利': '李雲龍', '美國': '美國往事', '印度': None}

dic.setdefault('印度','三傻大鬧寶萊塢')   #即便是空值也不從新賦值
print(dic)      #結果:{'意大利': '李雲龍', '美國': '美國往事', '印度': None}

dic.setdefault('美國','三傻大鬧寶萊塢')
print(dic)          #結果:{'意大利': '李雲龍', '美國': '美國往事', '印度': None}
總結:即便一用setdefault開始建立沒有添加值,利用setdefault再次添加也不會更新新的值.
(2)刪除 pop/popitem/del/clear
dic={'張藝謀':'紅高粱','李安':'斷背山','陳凱歌':'霸王別姬','郭德綱':'祖宗十九代'}
方法一
dic.pop('郭德綱')  #重點 須要記住的
print(dic)         #結果:   {'張藝謀': '紅高粱', '李安': '斷背山', '陳凱歌': '霸王別姬'}
方法二
dic.popitem()      #如今python3.6是刪除最後一個,python3.5之前隨機刪除  ,在Python早期,字典的無序的
print(dic)         #結果: {'張藝謀': '紅高粱', '李安': '斷背山'}
方法三
del dic['李安']
print(dic)         #結果: {'張藝謀': '紅高粱'}

dic.clear()        #清空
print(dic)         #結果: {}

(3)#修改 dic[新鍵]=新值 update
dic={'河南':'胡辣湯','開封':'灌湯包','武漢':'熱乾麪'}
dic['河南']='燴麪'     #總結:老key=新值
print(dic)    #{'河南': '燴麪', '開封': '灌湯包', '武漢': '熱乾麪'}

update
dic1={'趙四':'劉小光','劉能':'王曉利','王木生':'範偉'}
dic2={'趙四':'寶寶','劉能':'萌萌','皮校長':'皮長山'}
dic1.update(dic2)
print(dic1)   #dic2把dic1更新   結果:{'趙四': '寶寶', '劉能': '萌萌', '王木生': '範偉', '皮校長': '皮長山'}
print(dic2)   #dic2不變        結果:{'趙四': '寶寶', '劉能': '萌萌', '皮校長': '皮長山'}
小結:update有相同的鍵,就把原來的值更新,可是不經常使用

(4)查找
dic1={'趙四':'劉小光','劉能':'王曉利','王木生':'範偉'}
a.   直接使用key就能夠拿到value
dic1={'趙四':'劉小光','劉能':'王曉利','王木生':'範偉'}
print(dic1['趙四'])        #結果:劉小光
print(dic1['趙四四'])      #KeyError: '趙四四'  key不存在

b.   get(key)
dic1={'趙四':'劉小光','劉能':'王曉利','王木生':'範偉'}
print(dic1.get('劉能'))     #結果:王曉利
print(dic1.get('劉能能'))     #結果:None  當key不存在返回None
print(dic1.get('劉能能','沒有這我的'))     #結果:當key不存在,返回第二個參數,默認第二個參數是None
                        #結果:沒有這我的
c.  setdefault()
setdefault() 第一個功能是添加(當key不存在),第二個功能是查詢(根據你給的key查詢)
整個執行流程:判斷給的key是否存在,
若是key存在,就不執行新增流程,直接查詢出這個key對應的value
若是key不存在,先執行新增操做,再使用key把對應的value查詢出來

例一
  dic1={'趙四':'劉小光','劉能':'王曉利','王木生':'範偉'}
  ret=dic1.setdefault('皮長山','皮校長')
  print(ret)   #結果:皮校長  #先找再查

例二
  dic1={'趙四':'劉小光','劉能':'王曉利','王木生':'範偉'}
  ret=dic1.setdefault('王木生','寶寶')
  print(ret)     #結果:範偉   #先找再查

 

三.字典的遍歷

(1)for循環遍歷字典
A.
dic={'趙四':'劉小光','劉能':'王曉利','王木生':'範偉'}
直接用for循環
for key in dic: #直接循環字典拿到的是key,有key直接拿value
print(key)
print(dic[key])

結果:
趙四
劉小光
劉能
王曉利
王木生
範偉
B.
dic={'趙四':'劉曉光','劉能':'王曉利','王木生':'範偉'}
直接for循環
for key in dic:     #直接循環字典拿到的是key,有key直接拿value
print(key,dic[key]) #打印出來的是:鍵和值
結果:
  趙四 劉小光
  劉能 王曉利
  王木生 範偉
(2)
A:
不經常使用,上邊有一個更簡單的,直接用dic
dic={'趙四':'劉小光','劉能':'王曉利','王木生':'範偉'}
print(dic.keys()) #dict_keys(['趙四', '劉能', '王木生']) ,像列表,是山寨列表,高仿列表
for el in dic.keys(): #循環,能夠獲取到每個key
print(el)
結果:
  趙四
  劉能
  王木生
B:
dic={'趙四':'劉小光','劉能':'王曉利','王木生':'範偉'}
當只須要值的時候
for v in dic.values():
print(v)
結果:
劉小光
王曉利
範偉
C:
dic={'趙四':'劉小光','劉能':'王曉利','王木生':'範偉'}
print(dic.values()) #結果:dict_values(['劉小光', '王曉利', '範偉'])
print(dic.keys()) #結果:dict_keys(['趙四', '劉能', '王木生'])
print(dic.items()) #結果:dict_items([('趙四', '劉小光'), ('劉能', '王曉利'), ('王木生', '範偉')])
D:
dic={'趙四':'劉小光','劉能':'王曉利','王木生':'範偉'}
for item in dic.items():
print(item) #元組類型
k=item[0]
v=item[1]
print(k,v)
結果:
  ('趙四', '劉小光')
   趙四 劉小光
  ('劉能', '王曉利')
劉能 王曉利
('王木生', '範偉')
王木生 範偉
E:
dic={'趙四':'劉小光','劉能':'王曉利','王木生':'範偉'}
for k,v in dic.items():
print(k,v)

結果:
   趙四 劉小光
   劉能 王曉利
   王木生 範偉
(3)
a,b=1,2 #解構,解包
print(a)
print(b)

c=1,2,3
print(c)      #1,2,3
print(type(c)) #<class 'tuple'>
d=(1,2,3)  #沒有解包,直接建立一個元組
print(d)

支持解包的類型: list,tuple
(4)
遍歷字典的最簡單的方法(最高效的方法)
#for k,v in dic.items():

dic={'週五':'等着放假','週六':'放假','週日':'等着上課'}
a.直接用for循環遍歷字典的key
for k in dic: #k直接拿到的是key
print(k,dic[k])

b.使用dic.items() 解構能夠直接拿到k,v,也就是鍵和值
for k,v in dic.items():
print(k,v)

四.字典的嵌套

題目

wf={
    'name':'汪峯',
    'age':52,
    'hobby':['唱歌','上頭條','穿皮庫'],
    'wife':{
        'name':'章子怡',
        'age':49,
        'hobby':['演戲','上電視','當導師'],
        'tishen':{
            'name':'萌萌',
            'age':28
        },
        'zhuli':{
            'name':'磊磊',
            'age':20
        }
    },
    'zhuli':{
        'name':'寶寶',
        'age':23,
        'hobby':['抽菸','喝酒','燙頭']
    },
    'children':[{'name':'汪老大'},{'name':'汪老二'}]
}
View Code
練習題:
汪峯第二個孩子的年齡
wf['children'][1]['age']=2
print(wf)
(1)汪峯助理的名字
print(wf['zhuli']['name'])
(2)汪峯老婆的替身的名字
print(wf['wife']['tishen']['name'])
(3)汪峯老婆的第二個愛好
print(wf['wife']['hobby'][1])
(4)汪峯助理的第三個愛好
print(wf['zhuli']['hobby'][2])
(5)給汪峯的助理+10歲     #(兩種方法)
wf['zhuli']['age']=wf['zhuli']['age']+10
wf['zhuli']['age']=33
print(wf)
(6)汪峯的老婆添加一個愛好('導戲)
wf['wife']['hobby'].append('導戲')
wf['wife']['hobby'].extend('導戲')        #錯誤方法,這個是迭代添加   '當導師', '導戲', '導', '戲'
print(wf)
(7)刪除汪峯助理的'抽菸'愛好   (三種刪除方法)
wf['zhuli']['hobby'].remove('抽菸')
wf['zhuli']['hobby'].pop(0)           #注意pop指定的是索引
del wf['zhuli']['hobby'][0]
print(wf)

五.set集合

(1)
運行以後,是無序的
  s={'周潤發','大潤發','王潤髮','周潤發'} #去重,留下不重複的
  print(s)
(2)把列表轉化成集合 x 轉化成y類型 y()
惟一能用到的點,去重複
lst = ["麻將", "牌九", "骰子", "撲克", "虎機", "骰子", "撲克", "虎機", "撲克", "虎機", "撲克", "虎機"]
s=set(lst)
print(s) #把集合編繪列表
lst=list(s)
print(lst) #順序是亂的,可是對比它的優勢,是能夠忽略的
(3)計算機中麻煩的事情
  1.去重 2.排序
(4)
瞭解 集合的增刪改查就行,不須要記憶
能夠用石墨文檔//印象筆記
A.增長
s={'小米','華爲','vivo'}
s.add('oppo')  #非要記,就記這個就好了
print(s)

s.update('冬瓜')     #迭代添加
print(s)
B.刪
s={'小米','華爲','vivo'}
ret=s.pop()   #隨機刪除一個
print(s)     #剩下的集合
print(ret)    #刪除的元素

s.remove('小米')   #指定刪除
print(s)
重點記憶:集合和字典,都是沒有索引和切片的,由於二者內部都是亂序的
s.clear()    #清空
print(s)

C.改
修改,先刪除,再添加
把小米改爲J羅
s={'小米','華爲','vivo'}
s.remove('小米')
s.add('J羅')
print(s)

for el in s:
    print(el)    #迭代打印
(5)
數學運算
s1={1,2,3}
s2={1,2,4}

交集 &與字符
print(s1&s2)
print(s1.intersection(s2))

並集
print(s1|s2)
print(s1.union(s2))

差集
print(s1-s2) #s1中特有的內容
print(s1.difference(s2))

反交集
print(s1^s2) #兩個集合中特有的內容
print(s1.symmetric_difference(s2))
反交集是什麼?
例如:集合A={0,1,2,3},集合B={2,3}
那麼集合A和集合B的交集就是{2,3}
集合A和集合B的反交集就是{0,1}

(6)
集合自己是可變的數據類型,不可哈希
集合套集合->不能相互嵌套的
集合中的元素必須可哈希(不可變的)
s={123}

#<冰雪奇緣>
若是非要集合套集合
s=frozenset({'哈哈','呵呵'}) #不可變的數據類型(集合)
print(s)
驗證
for el in s:
print(el)
(7)
關於set集合做業:寫一個彩票開獎(36選7)
何時夠7個就結束
怎麼產生隨機數

#題目解法答案:
from random import randint
l=set()
# print(type(l))            #查看l的數據類型
for i in range(100):
    k=randint(1,36)         #randint是在一個自定義範圍內產生隨機整數,
    # print(randint(1,36))  
    l.add(k)
    if len(l)==7:      #生成7個不重複的代碼3
      break
print(l,i)                 #最後顯示,添加集合的結果,一共隨機了幾個數
View Code
(8)
預習
深淺拷貝
小數據池;是幹嗎的,小數據池存在的意義

文件操做(帶來的做業會不少)

開講-函數:
第一次考試:從開始到文件操做
下週:函數
  f(x)=x+1
f(1)=2
難點:多線程,多線程以後是一馬平川
      不僅是多線程,還有多進程,單線程,單進程,協程等等

 今日做業

# 1,有以下變量(tu是個元祖),請實現要求的功能
# tu = ("alex", [11, 22, {"k1": 'v1', "k2": ["age", "name"], "k3": (11, 22, 33)}, 44])
# a.講述元祖的特性
'''
不可更改的數據類型,有序
'''
# b.請問tu變量中的第一個元素, "alex",是否可被修改?
'''
tu = ("alex", [11, 22, {"k1": 'v1', "k2": ["age", "name"], "k3": (11, 22, 33)}, 44])
tu[0]=1
print(tu)
#TypeError: 'tuple' object does not support item assignment
上邊案例說明,tu是不可變數據類型,第一層元素的第一個元素是不能夠更改的
#字符串不可變
#元組第一層不可變
'''

# c.請問tu變量中的"k2"
# 對應的值是什麼類型?是否能夠被修改?若是能夠,請在其中添加一個元素"Seven"
'''
(1)對應的是列表類型(list)
(2)是能夠被修改的
(3)
tu = ("alex", [11, 22, {"k1": 'v1', "k2": ["age", "name"], "k3": (11, 22, 33)}, 44])
tu[1][2]['k2'].append('Seven')
print(tu)
'''

# d.請問tu變量中的"k3"對應的值是什麼類型?是否能夠被修改?若是能夠,請在其中添加一個元素"Seven"

'''
(1)元組
(2)不能夠被修改
(3)#強行轉也是能夠的
tu = ("alex", [11, 22, {"k1": 'v1', "k2": ["age", "name"], "k3": (11, 22, 33)}, 44])
tu[1][2]['k3'].append('Seven')
print(tu)
#結果報錯:AttributeError: 'tuple' object has no attribute 'append'
'''

2, 字典dic, dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]}
# a.請循環輸出全部的key
'''
dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]}
#方法一
# for i in dic:
#     print(i)
#方法二:
# for i in dic.keys():
#     print(i)
'''
# b.請循環輸出全部的value
'''
dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]}
# 方法一
for i in dic:
    print(dic[i])
# 方法二:
for i in dic.keys():
    print(dic[i])
'''
# c.請循環輸出全部的key和value
'''
#方法一:
dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]}
for i in dic:
    print(i,dic[i])
#方法二:
for k,v in dic.items():
    print(k,v)
'''
# d.請在字典中添加一個鍵值對,"k4": "v4",輸出添加後的字典
'''
dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]}
# 方法一:
# dic['k4']='v4'
# print(dic)
#方法二
# dic.setdefault('k4','v4')
# print(dic)
'''

# e.請在修改字典中"k1"對應的值爲"alex",輸出修改後的字典
'''
#方法一:
dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]}
dic['k1']='alex'
print(dic)
# 方法二
dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]}
dic1={'k1':'alex'}
dic.update(dic1)
print(dic)
'''

# f.請在k3對應的值中追加一個元素44,輸出修改後的字典
'''
dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]}
dic['k3'].append(44)
print(dic)
'''
# g.請在k3對應的值的第 1 個位置插入個元素 18,輸出修改後的字典
'''
dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]}
# dic['k3'].insert(1,'18')
dic['k3'].insert(0,'18')
print(dic)
View Code
3,
av_catalog = {
    "歐美": {
        "www.youporn.com": ["不少免費的,世界最大的", "質量通常"],
        "www.pornhub.com": ["不少免費的,也很大", "質量比yourporn高點"],
        "letmedothistoyou.com": ["可能是自拍,高質量圖片不少", "資源很少,更新慢"],
        "x-art.com": ["質量很高,真的很高", "所有收費,屌絲請繞過"]
    },
    "日韓": {
        "tokyo-hot": ["質量怎樣不清楚,我的已經不喜歡日韓範了", "verygood"]
    },
    "大陸": {
        "1024": ["所有免費,真好,好人一輩子平安", "服務器在國外,慢"]
    }
}
View Code

 

# a, 給此["不少免費的,世界最大的", "質量通常"]列表第二個位置插入一個元素:'量很大'。
#注意這個插入的方法的應用
av_catalog['歐美']["www.youporn.com"].insert(1,'量很大')
print(av_catalog)
# b, 將此["質量很高,真的很高", "所有收費,屌絲請繞過"]列表的"所有收費,屌絲請繞過"刪除。
#方法:del remove pop

#方法一
# av_catalog['歐美']["x-art.com"].pop()
# print(av_catalog)
#方法二:
# del av_catalog['歐美']["x-art.com"][1]
# print(av_catalog)
# 方法三:
# av_catalog['歐美']["x-art.com"].pop(1)
# print(av_catalog)
#方法四:
# av_catalog['歐美']["x-art.com"].remove("所有收費,屌絲請繞過")
# print(av_catalog)
'''
# c, 在此["質量很高,真的很高", "所有收費,屌絲請繞過"]列表中添加"金老闆最喜歡這個"。
'''
#方法一
# av_catalog['歐美']['x-art.com'].append('金老闆最喜歡這個')
# print(av_catalog)
#方法二
# av_catalog['歐美']['x-art.com'].insert(-1,'金老闆最喜歡這個')
# print(av_catalog)
'''
# d, 將此["質量怎樣不清楚,我的已經不喜歡日韓範了", "verygood"]列表的"verygood"所有變成大寫。
'''
#方法一
# av_catalog['日韓']['tokyo-hot'][-1]=av_catalog['日韓']['tokyo-hot'][-1].upper()
# print(av_catalog)
#方法二
# av_catalog['日韓']['tokyo-hot'][-1]=av_catalog['日韓']['tokyo-hot'][-1].swapcase()
# print(av_catalog)
# 方法三
# av_catalog['日韓']['tokyo-hot'][-1]='VERYGOOD'
# print(av_catalog)
#方法四
# av_catalog['日韓']['tokyo-hot'][1]='VERYGOOD'
# print(av_catalog)
'''
# e, 給'大陸'對應的字典添加一個鍵值對 '1048': ['一天就封了']
'''
#方法一
# av_catalog['大陸']['1048']='一天就封了'
# print(av_catalog)
# 方法二
# av_catalog['大陸'].setdefault('1048','一天就封了')
# print(av_catalog)
'''
# f, 刪除此 "letmedothistoyou.com": ["可能是自拍,高質量圖片不少", "資源很少,更新慢"]鍵值對。
'''
#pop和del 能夠指定刪除字典
# 方法一
# av_catalog['歐美'].pop('letmedothistoyou.com')
# print(av_catalog)
#方法二
# del av_catalog['歐美']['letmedothistoyou.com']
# print(av_catalog)
'''
# g, 給此["所有免費,真好,好人一輩子平安", "服務器在國外,慢"]列表的第一個元素,加上一句話:'能夠爬下來'
'''
#方法一;在最前面添加一個元素"能夠爬下來"
# av_catalog['大陸']['1024'].insert(0,'能夠爬下來')
# print(av_catalog)
#方法二1:#在第一個元素的後面添加
# av_catalog['大陸']['1024'][0]=av_catalog['大陸']['1024'][0]+'能夠爬下來'
# print(av_catalog)
#方法二2:
av_catalog['大陸']['1024'][0]='所有免費,真好,好人一輩子平安能夠爬下來'
print(av_catalog)
 四、有字符串
"k:1|k1:2|k2:3|k3:4"
處理成字典
{'k': 1, 'k1': 2....}(升級題)
#方法一:
# dic={}
# s="k:1|k1:2|k2:3|k3:4"
# s=s.split("|")
# print(s)
# for i in s:
#     a,b=i.split(':')
#     dic[a]=int(b)
# print(dic)

#方法二
# dic={}
# s="k:1|k1:2|k2:3|k3:4"
# s=s.split("|")
# print(s)
# for i in s:
#     a=i.split(':')
#     dic[a[0]]=int(a[1])
# print(dic)
View Code
 五、元素分類
有以下值li = [11, 22, 33, 44, 55, 66, 77, 88, 99, 90],將全部大於66的值保存至字典的第一個key中,將小於66
的值保存至第二個key的值中。
即: {'k1': 大於66的全部值列表, 'k2': 小於66的全部值列表}

方法一
s={'k1':[],'k2':[]}
 li = [11, 22, 33, 44, 55, 66, 77, 88, 99, 90]
 for i in li:
     if i>66:
         s['k1'].append(i)
     elif i<66:
         s['k2'].append(i)
     else:
         continue
 print(s)
View Code
方法二
 s={}
 li = [11, 22, 33, 44, 55, 66, 77, 88, 99, 90]
 for i in li:
     if i>66:
         s.setdefault('k1',[]).append(i)
     elif i<66:
         s.setdefault('k2',[]).append(i)
     else:
         continue
 print(s)

六、輸出商品列表,用戶輸入序號,顯示用戶選中的商品(升級題)
商品列表:
goods = [{"name": "電腦", "price": 1999},
{"name": "鼠標", "price": 10},
{"name": "遊艇", "price": 20},
{"name": "美女", "price": 998}, ]
要求:
1:頁面顯示
序號 + 商品名稱 + 商品價格,如:
1 電腦 1999
2 鼠標 10

2:用戶輸入選擇的商品序號,而後打印商品名稱及商品價格
3:若是用戶輸入的商品序號有誤,則提示輸入有誤,並從新輸入。
4:用戶輸入Q或者q,退出程序。

goods = [{"name": "電腦", "price": 1999},
         {"name": "鼠標", "price": 10},
         {"name": "遊艇", "price": 20},
         {"name": "美女", "price": 998}, ]
for i in range(len(goods)):
    print(i+1,goods[i]['name'],goods[i]['price'])
while 1:
    content = input("輸入Q退出,或請輸入選擇的商品序號:").strip()
    if content.upper()=='Q':
        break
    elif content.isdigit():
        if int(content) in range(1,len(goods)+1):
            print(int(content),goods[int(content)-1]['name'],goods[int(content)-1]['price'])
        else:
            print('輸入錯誤,請從新輸入')
    else:
        print('輸入錯誤,請從新輸入')
View Code

方法二:運用三元運算符
goods = [{"name": "電腦", "price": 1999},
         {"name": "鼠標", "price": 10},
         {"name": "遊艇", "price": 20},
         {"name": "美女", "price": 998}, ]
for i in range(len(goods)):
    print(i+1,goods[i]['name'],goods[i]['price'])
while 1:
    content = input("輸入Q退出,或請輸入選擇的商品序號:").strip()
    if content.upper()=='Q':
        break
    elif content.isdigit():
        print(int(content),goods[int(content)-1]['name'],goods[int(content)-1]['price'] if int(content) in range(1,len(goods)+1) else print('輸入錯誤,請從新輸入'))
    else:
        print('輸入錯誤,請從新輸入')
View Code

 

補充:字典沒有就顯示後面的這條數據

相關文章
相關標籤/搜索