python我想对你说_python学习第3天-----字典、解构
1.字典
1)定義:查找速度快,效率高;用{}括起來,內部使用key:value的形式來保存數據;鍵值對是無序的,不是按照定義的方式保存數據的(類似于json文件),
例如:?{'jay':'周杰倫','jj'::'林俊杰'}
注:字典的key必須是可哈希的(先將key通過hash算法轉化成一個hash值,再通過hash值直接找到值),不可變的;而對于value是沒有限制的
#如下字典為錯誤定義:
dic = {"cat":"小貓","dog":"小狗",["fruit"]:"apple"}print(dic)
報錯:
TypeError: unhashable type:'list'
View Code
2)字典的增加
①普通增加
dic = {"cat":"小貓","dog":"小狗"}
dic["pig"]="小豬佩奇"
print(dic)
輸出:
{'pig': '小豬佩奇', 'dog': '小狗', 'cat': '小貓'}
View Code
注:如果key存在了會替換掉原來的數據
dic = {"cat":"小貓","dog":"小狗"}
dic["pig"]="小豬佩奇"dic["pig"]="小豬喬治"
print(dic)
輸出:
{'dog': '小狗', 'cat': '小貓', 'pig': '小豬喬治'}
View Code
②通過函數setdefault對字典進行增加
dic = {"cat":"小貓","dog":"小狗"}
dic["pig"]="小豬佩奇"dic.setdefault("panda","小熊貓")print(dic)
輸出:
{'dog': '小狗', 'panda': '小熊貓', 'cat': '小貓', 'pig': '小豬佩奇'}
View Code
注:通過函數setdefault()添加,如果字典中已經包含了這個key,那么不再往字典中繼續保存新的值,還是原來的值
dic = {"cat":"小貓","dog":"小狗"}
dic["pig"]="小豬佩奇"dic.setdefault("panda","小熊貓")
dic.setdefault("panda","中華大熊貓")print(dic)
輸出:
{'pig': '小豬佩奇', 'cat': '小貓', 'panda': '小熊貓', 'dog': '小狗'}
View Code
3)字典的刪除
①通過pop用key去刪除數據(刪除一個字典元素,返回字典的value值)
dic = {"cat":"小貓","dog":"小狗"}
dic["pig"]="小豬佩奇"res= dic.pop("dog")print(res)print(dic)
輸出:
小狗
{'cat': '小貓', 'pig': '小豬佩奇'}
View Code
②通過del刪除字典中的元素
dic = {"cat":"小貓","dog":"小狗"}
dic["pig"]="小豬佩奇"
del dic["cat"]print(dic)
輸出:
{'dog': '小狗', 'pig': '小豬佩奇'}
View Code
③通過popitem隨機刪除字典中的元素(會返回一個元組)
dic = {"cat":"小貓","dog":"小狗"}
dic["pig"]="小豬佩奇"res=dic.popitem()print(res)print(dic)
輸出:
('cat', '小貓')
{'pig': '小豬佩奇', 'dog': '小狗'}
View Code
④清空字典中的所有元素
dic = {"cat":"小貓","dog":"小狗"}
dic["pig"]="小豬佩奇"dic.clear()print(dic)
輸出:
{}
View Code
4)字典的修改
①將字典一中的內容更新到字典二中,如果key重名,則進行替換,如果key值不存在,進行新增
dic_1 = {"cat":"小貓","dog":"小狗"}
dic_2= {"pig":"小豬","panda":"小熊貓","cat":"大花貓"}
dic_1.update(dic_2)print(dic_1)print(dic_2)
輸出:
{'dog': '小狗', 'panda': '小熊貓', 'cat': '大花貓', 'pig': '小豬'}
{'panda': '小熊貓', 'cat': '大花貓', 'pig': '小豬'}
View Code
例:對key的值進行修改
dic = {'id':1,'name':"馬云",'money':10000000}
dic['money'] = dic['money'] - 500000
print(dic)
輸出:
{'money': 9500000, 'name': '馬云', 'id': 1}
View Code
5)字典元素的查找
①按照[],通過key取值 (? []中的值就類似于索引 );通過該方法查值,如果字典中的key不存在,就會報錯
dic_2 = {"pig":"小豬","panda":"小熊貓","cat":"大花貓"}print(dic_2['panda'])
輸出:
小熊貓
View Code
②通過get方法,通過key取值;如果key不存在,則返回None
dic_2 = {"pig":"小豬","panda":"小熊貓","cat":"大花貓"}print(dic_2.get("pig"))print(dic_2.get("dog"))
輸出:
小豬
None
View Code
#通過get獲取值時,如果字典中key值不存在,返回None,可以設定一個默認值,當key值不存在時返回一個默認值
dic = {"pig":"小豬","panda":"小熊貓","cat":"大花貓"}print(dic.get("dog","不存在"))
輸出:
不存在
View Code
③通過setdefault獲取字典中對應key的值
注:setdefault首先判斷原來字典中有沒有key,如果沒有,則執行新增;其次用這個key去字典中查詢,返回查到的結果
dic = {"pig":"小豬","panda":"小熊貓","cat":"大花貓"}print(dic.setdefault("panda"))
輸出:
小熊貓
View Code
#獲取setdefault存入的值
dic = {"pig":"小豬","panda":"小熊貓","cat":"大花貓"}
res= dic.setdefault('dog',"小奶狗")print(res)print(dic)
輸出:
小奶狗
{'panda': '小熊貓', 'dog': '小奶狗', 'pig': '小豬', 'cat': '大花貓'}
View Code
#如果原來的字典中,存在這個key,則直接返回原來的值
dic = {"pig":"小豬","panda":"小熊貓","cat":"大花貓"}
res= dic.setdefault('panda',"大大大大熊貓")print(res)print(dic)
輸出:
小熊貓
{'panda': '小熊貓', 'cat': '大花貓', 'pig': '小豬'}
View Code
6)字典的相關操作
①返回字典中所有的key(返回key的集合,像是列表,但是不是列表,也可以進行迭代循環)
dic = {"pig":"小豬","panda":"小熊貓","cat":"大花貓"}print(dic.keys())for i indic.keys():print(i)
輸出:
dict_keys(['pig', 'cat', 'panda'])
pig
cat
panda
View Code
②返回字典中所有的值(像是列表,但是不是列表,也可以進行迭代循環)
dic = {"pig":"小豬","panda":"小熊貓","cat":"大花貓"}print(dic.values())for i indic.values():print(i)
輸出:
dict_values(['小豬', '小熊貓', '大花貓'])
小豬
小熊貓
大花貓
View Code
③獲取所有的鍵值對(每一項都是一個元組)
dic = {"pig":"小豬","panda":"小熊貓","cat":"大花貓"}print(dic.items())for i indic.items():print(i)
輸出:
dict_items([('pig', '小豬'), ('cat', '大花貓'), ('panda', '小熊貓')])
('pig', '小豬')
('cat', '大花貓')
('panda', '小熊貓')
View Code
#通過元組的索引分別獲取key和values的值
dic = {"pig":"小豬","panda":"小熊貓","cat":"大花貓"}print(dic.items())for i indic.items():print(i[0]) #獲取key
print(i[1]) #獲取values
輸出:
dict_items([('cat', '大花貓'), ('pig', '小豬'), ('panda', '小熊貓')])
cat
大花貓
小豬
panda
小熊貓
View Code
2.解構/解包:
把元組中每一個元素拿出來,賦值給前面的變量,這種方式叫做解包(列表也適用)
a,b = 1,2
a,b = (1,2)
a,b = [1,2]
#例1
a,b = (1,2)print(a,b)
輸出:1 2
View Code
#例2
a,b,c = ('古力娜扎','馬兒扎哈','迪麗熱巴')print(b)
輸出:
馬兒扎哈
View Code
#通過解構的方式,遍歷items中的key和values
dic = {"pig":"小豬","panda":"小熊貓","cat":"大花貓"}print(dic.items())for item indic.items():
k,v=itemprint(k,v)
輸出:
dict_items([('panda', '小熊貓'), ('pig', '小豬'), ('cat', '大花貓')])
panda 小熊貓
pig 小豬
cat 大花貓
View Code
#解構進階
dic = {"pig":"小豬","panda":"小熊貓","cat":"大花貓"}print(dic.items())for k,v indic.items():print(k,v)
輸出:
dict_items([('pig', '小豬'), ('panda', '小熊貓'), ('cat', '大花貓')])
pig 小豬
panda 小熊貓
cat 大花貓
View Code
總結:
1)keys:獲取到字典中所有的key,然后存在一個高仿列表中
2)values:獲取到字典中所有的value,然后存在一個高仿的列表中
3)items:獲取到所有的鍵值對,以元組的形式存放在高仿的列表中
3.字典的嵌套
#字典嵌套取值練習
dic ={'name':"阿貍",'age':"18",'nickname':"九尾妖狐",'skill': {'q':"欺詐寶珠",'w':"妖異狐火",'e':"魅惑妖術",'r':"靈魂突襲"},'hoby':['包子','猴子']
}print(dic["skill"]["r"])print(dic["hoby"][1])
輸出:
靈魂突襲
猴子
View Code
4.練習
1)有字符串"k:1|k1:2|k2:3|k3:4"處理成字典{'k':1,'k2':2….}
s = "k:1|k1:2|k2:3|k3:4"s_new= s.split("|")print(s_new)
dic={}for i ins_new:
k,v= i.split(":")
dic[k]=int(v)print(dic)
輸出:
['k:1', 'k1:2', 'k2:3', 'k3:4']
{'k3': 4, 'k1': 2, 'k2': 3, 'k': 1}
View Code
2)按照如下需求處理列表
①頁面顯示: 序號 + 商品名稱 + 商品價格,如:
1 電腦 1999
2 鼠標 10
.。。
②用戶輸入選擇的商品序號,然后打印商品名稱及商品價格
③如果用戶輸入的商品序號有誤,則提示輸入有誤,并重新輸入
④用戶輸入Q或者q,退出程序
⑤列表如下:
goods = [{'name':"電腦",'price':1999},{'name':"鼠標",'price':10},{'name':"游艇",'price':20},{'name':"美女",'price':998},]
#步驟1
goods = [{'name':"電腦",'price':1999},
{'name':"鼠標",'price':10},
{'name':"游艇",'price':20},
{'name':"美女",'price':998},]for i ingoods:print(goods.index(i),i['name'],i['price']) #doods.index(i) 先獲取到列表中元素的下標
輸出:1 電腦 1999
2 鼠標 10
3 游艇 20
4 美女 998
View Code
#步驟2
goods = [{'name':"電腦",'price':1999},
{'name':"鼠標",'price':10},
{'name':"游艇",'price':20},
{'name':"美女",'price':998},]while 1:for i ingoods:print(goods.index(i)+1,i['name'],i['price']) #doods.index(i) 先獲取到列表中元素的下標
str_input = input("請輸入你要選擇的序號,按Q/q退出:")if str_input.isdigit() and int(str_input) > 0 and int(str_input)
i_index= int(str_input) -1
print(goods[i_index]['name'],goods[i_index]['price'])elif str_input.upper() == "Q":break
else:print("輸入有誤,請重新輸入")
View Code
總結
以上是生活随笔為你收集整理的python我想对你说_python学习第3天-----字典、解构的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python中matplotlib画图_
- 下一篇: 基类数组存放派生类_永远不要将派生类数组