Python基礎(chǔ)(15)-字典數(shù)據(jù)類型及其所具備的方法

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é)果:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末惑淳,一起剝皮案震驚了整個(gè)濱河市饺窿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌绢馍,老刑警劉巖肠套,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件糠排,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡哺徊,警方通過查閱死者的電腦和手機(jī)乾闰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門涯肩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人疗垛,你說我怎么就攤上這事硫朦。” “怎么了泽裳?”我有些...
    開封第一講書人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵破婆,是天一觀的道長祷舀。 經(jīng)常有香客問我烹笔,道長夺克,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮狡门,結(jié)果婚禮上锅很,老公的妹妹穿的比我還像新娘。我一直安慰自己叛复,他們只是感情好扔仓,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開白布翘簇。 她就那樣靜靜地躺著,像睡著了一般呜笑。 火紅的嫁衣襯著肌膚如雪彻犁。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,370評(píng)論 1 302
  • 那天驼鹅,我揣著相機(jī)與錄音谤民,去河邊找鬼疾宏。 笑死,一個(gè)胖子當(dāng)著我的面吹牛为牍,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播抖韩,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼疫铜,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼壳咕!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起谓厘,我...
    開封第一講書人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤竟稳,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后聂宾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體讲逛,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡盏混,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年许赃,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片混聊。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡句喜,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出植康,到底是詐尸還是另有隱情展懈,我是刑警寧澤供璧,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布睡毒,位于F島的核電站冗栗,受9級(jí)特大地震影響贞瞒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜军浆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一乒融、第九天 我趴在偏房一處隱蔽的房頂上張望摄悯。 院中可真熱鬧,春花似錦申钩、人聲如沸瘪阁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽廉涕。三九已至艇拍,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間卸夕,已是汗流浹背娇哆。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來泰國打工勃救, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蒙秒,地道東北人宵统。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像瓢省,于是被迫代替她去往敵國和親痊班。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容