15.1-創(chuàng)建字典:
第一種方式:
說明:字典的鍵不僅僅可以是字符串猾骡,也可以是數(shù)字寸痢。
>>> dic = {
... "k1" : 11,
... "k2" : 22,
... 3 : 33
... }
>>> type(dic)
<type 'dict'>
第二種方式:
>>> dic = dict({
... "k1" : 11,
... "k2" : 22,
... 3 : 33
... })
>>> type(dic)
<type 'dict'>
def __init__(self, seq=None, **kwargs): # known special case of dict.__init__
"""
dict() -> new empty dictionary
dict(mapping) -> new dictionary initialized from a mapping object's
(key, value) pairs
dict(iterable) -> new dictionary initialized as if via:
d = {}
for k, v in iterable:
d[k] = v
dict(**kwargs) -> new dictionary initialized with the name=value pairs
in the keyword argument list. For example: dict(one=1, two=2)
# (copied from class doc)
"""
pass
通過源碼可以看出 dict
可以初始化一個(gè)映射對(duì)象的 (鍵,值)對(duì)鸿染,即創(chuàng)建一個(gè)與該映射對(duì)象具有相同鍵-值對(duì)的字典板祝。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
dic = dict(k1 = 11,k2 = 22)
print(dic)
運(yùn)行結(jié)果:
還可以接收一個(gè)可迭代對(duì)象肛循,會(huì)將可迭代對(duì)象里的元素通過for循環(huán)一遍庆寺,將其元素當(dāng)做字典的值蚊夫,而鍵是默認(rèn)沒有的,所以可以通過 enumerate()
函數(shù)給它加一個(gè)序號(hào)止邮,當(dāng)做字典的鍵这橙。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
li = [11,22,33,44]
dic = dict(enumerate(li))
print(dic)
運(yùn)行結(jié)果:
15.2-索引
說明:由于字典是無序的,所以字典是通過鍵來進(jìn)行索引的埃唯,索引取值時(shí)鹰晨,若是鍵不存在就會(huì)報(bào)錯(cuò)墨叛。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
dic = {
"k1" : 11,
"k2" : 22,
"k3" : 33
}
# 索引
print(dic["k2"])
運(yùn)行結(jié)果:
注:字典是不能夠進(jìn)行切片的模蜡。
15.3-for循環(huán):
默認(rèn)循環(huán):
循環(huán)時(shí)默認(rèn)循環(huán)的是 key
。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
dic = {
"k1" : 11,
"k2" : 22,
"k3" : 33
}
# 默認(rèn)循環(huán)是 key
for i in dic:
print(i)
運(yùn)行結(jié)果:
循環(huán)key:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
dic = {
"k1" : 11,
"k2" : 22,
"k3" : 33
}
# 循環(huán)key忍疾,和默認(rèn)循環(huán)相同
for i in dic.keys():
print(i)
運(yùn)行結(jié)果:
注:和默認(rèn)循環(huán)相同闯传。
循環(huán)value:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
dic = {
"k1" : 11,
"k2" : 22,
"k3" : 33
}
# 循環(huán) value
for i in dic.values():
print(i)
運(yùn)行結(jié)果:
循環(huán)key-value:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
dic = {
"k1" : 11,
"k2" : 22,
"k3" : 33
}
# 循環(huán) 鍵值對(duì)
for k,v in dic.items():
print(k,v)
運(yùn)行結(jié)果:
15.4-字典(dict)內(nèi)部方法介紹:
clear(self):
說明:刪除字典中所有的元素卤妒。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
dic = {
"k1" : 11,
"k2" : 22,
"k3" : 33
}
print(dic)
# 清空字典
dic.clear()
print(dic)
運(yùn)行結(jié)果:
copy(self):
說明:淺拷貝则披。
fromkeys(*args, **kwargs):
說明:創(chuàng)建一個(gè)新的字典,第一個(gè)元素為可迭代的對(duì)象图谷,將其中的元素作為字典的鍵,第二個(gè)元素為字典所有鍵對(duì)應(yīng)的值便贵。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
dic = dict.fromkeys(["k1","k2","k3"],123456)
print(dic)
運(yùn)行結(jié)果:
簡單深入的例子:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
dic1 = dict.fromkeys(["k1","k2","k3"],11)
print(dic1)
dic2 = {"k1":11,"k2":11,"k3":11}
print(dic2)
運(yùn)行結(jié)果:
注:默認(rèn)生成一個(gè)字符串或者一個(gè)數(shù)字時(shí)嫉沽,以上兩個(gè)之間是沒有區(qū)別的俏竞,但是如果生成的是一個(gè)列表或其它類型就有區(qū)別了魂毁。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
dic1 = dict.fromkeys(["k1","k2","k3"],[])
print("dic1:",dic1)
dic2 = {"k1":[],"k2":[],"k3":[]}
print("dic2:",dic2)
print("-----" * 8)
# 在 空列表 里追加內(nèi)容出嘹,通過 fromkeys 創(chuàng)建時(shí),所有的鍵 共同對(duì)應(yīng)著 同一個(gè)列表
dic1["k1"].append("11")
print("dic1",dic1)
# 每一個(gè)列表各自占一個(gè)內(nèi)存
dic2["k1"].append("11")
print("dic2",dic2)
運(yùn)行結(jié)果:
get(self, k, d=None):
說明:返回指定鍵的值烦秩, k
表示要指定的鍵, d
表示指定鍵不存在時(shí)返回的值只祠,默認(rèn)返回None抛寝。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
dic = {
"k1" : 11,
"k2" : 22,
"k3" : 33
}
# 返回 "k2" 的值
ret = dic.get("k2")
print(ret)
# 指定鍵不存在時(shí),默認(rèn)返回 None
ret2 = dic.get("k4")
print(ret2)
# 指定鍵不存在時(shí)晶府,設(shè)置返回值
ret3 = dic.get("k4",0)
print(ret3)
運(yùn)行結(jié)果:
items(self):
說明:將字典中的鍵值對(duì)組成元組钻趋,并放到列表中返回。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
dic = {
"k1" : 11,
"k2" : 22,
"k3" : 33
}
ret = dic.items()
print(ret)
運(yùn)行結(jié)果:
keys(self):
說明:返回一個(gè)包含字典中鍵的列表蛮位。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
dic = {
"k1" : 11,
"k2" : 22,
"k3" : 33
}
ret = dic.keys()
print(ret)
運(yùn)行結(jié)果:
pop(self, k, d=None):
說明:移除字典中指定鍵對(duì)應(yīng)的值土至,并返回該鍵對(duì)應(yīng)的值, k
表示指定的鍵骡苞, d
表示當(dāng)鍵不存在又不想處理異常時(shí)填寫即可。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
dic = {
"k1" : 11,
"k2" : 22,
"k3" : 33
}
# 刪除 "k2" 并返回 "k2" 對(duì)應(yīng)的值
ret = dic.pop("k2")
print(ret)
print(dic)
# 當(dāng) "k4" 不存在時(shí)解幽,輸出 "0"
ret2 = dic.pop("k4",0)
print(ret2)
運(yùn)行結(jié)果:
popitem(self):
說明:隨機(jī)刪除字典中一對(duì)鍵和值烘苹,并返回該鍵值對(duì)。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
dic = {
"k1" : 11,
"k2" : 22,
"k3" : 33
}
# 隨即刪除并返回
print(dic.popitem())
print(dic)
運(yùn)行結(jié)果:
setdefault(self, k, d=None):
說明:如果指定鍵不存在霜定,則創(chuàng)建鍵廊鸥,如果存在則返回該鍵對(duì)應(yīng)的值惰说, k
表示指定的鍵, d
表示指定鍵不存在時(shí)典挑,設(shè)置的默認(rèn)值,默認(rèn)為None拙寡。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
dic = {
"k1" : 11,
"k2" : 22,
"k3" : 33
}
# 指定鍵存在時(shí)顾犹,返回該鍵對(duì)應(yīng)的值
ret1 = dic.setdefault("k2")
print(ret1)
# 指定鍵不存在時(shí),則創(chuàng)建該鍵擎宝,該鍵默認(rèn)值為 None
ret2 = dic.setdefault("k4")
print(ret2)
# 設(shè)置默認(rèn)值
ret3 = dic.setdefault("k5",55)
print(ret3)
print(dic)
運(yùn)行結(jié)果:
update(self, E=None, **F):
說明:更新浑玛,將一個(gè)字典中的鍵值對(duì)更新到另一個(gè)字典中顾彰,如果字典原有的鍵與新添加的鍵重復(fù),則新添加的覆蓋原有的筋搏, E
表示添加到指定字典中的字典厕隧。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
dic1 = {
"k1" : 11,
"k2" : 22,
"k3" : 33
}
dic2 = {
"k3" : "v3v3",
"k4" : 44,
"k5" : 55
}
dic1.update(dic2)
print(dic1)
運(yùn)行結(jié)果:
values(self):
說明:返回一個(gè)包含字典中值的列表。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
dic = {
"k1" : 11,
"k2" : 22,
"k3" : 33
}
ret = dic.values()
print(ret)
運(yùn)行結(jié)果:
15.5-檢查字典中指定key是否存在:
可以通過 in
來查看指定 key
是否存在字典中髓迎,如果存在字典中返回 True
建丧,否則返回 False
翎朱。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
dic = {
"k1" : 11,
"k2" : 22,
"k3" : 33
}
# 指定 鍵 存在字典中
ret1 = "k2" in dic.keys()
print(ret1)
# 指定 鍵 不存在字典中
ret2 = "k4" in dic.keys()
print(ret2)
運(yùn)行結(jié)果:
既然可以通過 in
來查看指定 key
是否存在字典中,那么也是可以通過 in
來查看指定 value
是否存在字典中的挣郭。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
dic = {
"k1" : 11,
"k2" : 22,
"k3" : 33
}
# 指定 值 存在字典中
ret1 = 33 in dic.values()
print(ret1)
# 指定 值 不存在字典中
ret2 = 44 in dic.values()
print(ret2)
運(yùn)行結(jié)果:
15.6-刪除字典指定鍵值對(duì):
通過 del
關(guān)鍵字刪除字典中指定的鍵值對(duì)。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
dic = {
"k1" : 11,
"k2" : 22,
"k3" : 33
}
print(dic)
# 刪除 "k1" 這個(gè)鍵值對(duì)
del dic["k1"]
print(dic)
運(yùn)行結(jié)果:
15.7-enumerate()函數(shù):
說明: enumerate(iterable, start=0)
根據(jù)可迭代對(duì)象創(chuàng)建枚舉對(duì)象蕉汪,即同時(shí)返回索引和值, iterable
表示接受一個(gè)可迭代對(duì)象者疤, start
表示指定索引的起始值驹马,默認(rèn)為0。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
li = ["手機(jī)","電腦","汽車用品","圖書"]
# 起始值從 1 開始算利,默認(rèn)為 0
for key,item in enumerate(li,1):
print(key,item)
choice = int(input("請(qǐng)選取商品:"))
# 索引是從 0 開始的泳姐,只不過打印是從 1 開始的
# 所以選 1 的時(shí)候打印的還是電腦,所以可以讓輸入的值 -1
buy = li[choice-1]
print(buy)
運(yùn)行結(jié)果:
15.8-練習(xí)題:
元素分類:
要求:有如下值集合[11,22,33,44,55,66,77,88,99,90]將所有大于 66 的值保存至字典的第一個(gè)key中缎患,將小于 66 的值保存至第二個(gè)key的值中阎肝。即: {'k1': 大于66的所有值, 'k2': 小于等于66的所有值}风题。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
l1 = [11,22,33,44,55,66,77,88,99,90]
dic = {
"k1" : [],
"k2" : []
}
# 循環(huán) l1 并對(duì)里面每一個(gè)元素進(jìn)行判斷
for i in l1:
if i > 66:
dic["k1"].append(i)
else:
dic["k2"].append(i)
print(dic)
運(yùn)行結(jié)果:
通過for循環(huán)將列表轉(zhuǎn)換成字典:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
li = [11,22,33,44]
dic = {}
# key 是從 10 開始遞增的
for k,v in enumerate(li,10):
dic[k] = v
print(dic)
# dic = dict(enumerate(li,10)) # 上面的循環(huán)就是字典內(nèi)部的本質(zhì),就是說這一句的本質(zhì)就是上面的循環(huán)
# print(dic)
運(yùn)行結(jié)果:
查找列表中符合條件元素:
要求:查找列表中元素骡楼,移除每個(gè)元素的空格稽鞭,并查找以 a或A開頭 并且以 c 結(jié)尾的所有元素朦蕴。
li = ["alec", " aric", "Alex", "Tony", "rain"]
tu = ("alec", " aric", "Alex", "Tony", "rain")
dic = {'k1': "alex", 'k2': ' aric', "k3": "Alex", "k4": "Tony"}
注:以上三個(gè)任選其一即可。
列表:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
li = ["alec", " aric", "Alex", "Tony", "rain","abcd"]
for i in li:
i = i.strip()
#if 判斷的順序是從前到后的涉茧,如果第一個(gè)條件為 True 后面跟著 or 就表示自己成功就行了疹娶,就不會(huì)去判斷后面的了
# 前面加一個(gè)括號(hào),將這個(gè)括號(hào)當(dāng)成了一個(gè)整體
if (i.startswith("a") or i.startswith("A")) and i.endswith("c"):
print(i)
運(yùn)行結(jié)果:
元組:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
li = ("alec", " aric", "Alex", "Tony", "rain","abcd")
for i in li:
i = i.strip()
if (i.startswith("a") or i.startswith("A")) and i.endswith("c"):
print(i)
運(yùn)行結(jié)果:
字典:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
dic = {'k1': "alex", 'k2': ' aric', "k3": "Alex", "k4": "Tony"}
for i in dic.values():
i = i.strip()
if (i.startswith("a") or i.startswith("A")) and i.endswith("c"):
print(i)
運(yùn)行結(jié)果: