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

15.1-創建字典:

第一種方式:

說明:字典的鍵不僅僅可以是字符串,也可以是數字。

>>> 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 可以初始化一個映射對象的 (鍵,值)對,即創建一個與該映射對象具有相同鍵-值對的字典。

#!/usr/bin/env python
# -*- coding:utf-8 -*-
dic = dict(k1 = 11,k2 = 22)
print(dic)

運行結果:

還可以接收一個可迭代對象,會將可迭代對象里的元素通過for循環一遍,將其元素當做字典的值,而鍵是默認沒有的,所以可以通過 enumerate() 函數給它加一個序號,當做字典的鍵。

#!/usr/bin/env python
# -*- coding:utf-8 -*-
li = [11,22,33,44]
dic = dict(enumerate(li))
print(dic)

運行結果:


15.2-索引

說明:由于字典是無序的,所以字典是通過鍵來進行索引的,索引取值時,若是鍵不存在就會報錯。

#!/usr/bin/env python
# -*- coding:utf-8 -*-
dic = {
    "k1" : 11,
    "k2" : 22,
    "k3" : 33
}

# 索引
print(dic["k2"])

運行結果:



注:字典是不能夠進行切片的。

15.3-for循環:

默認循環:

循環時默認循環的是 key

#!/usr/bin/env python
# -*- coding:utf-8 -*-
dic = {
    "k1" : 11,
    "k2" : 22,
    "k3" : 33
}

# 默認循環是 key
for i in dic:
    print(i)

運行結果:

循環key:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
dic = {
    "k1" : 11,
    "k2" : 22,
    "k3" : 33
}

# 循環key,和默認循環相同
for i in dic.keys():
    print(i)

運行結果:


注:和默認循環相同。

循環value:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
dic = {
    "k1" : 11,
    "k2" : 22,
    "k3" : 33
}

# 循環 value
for i in dic.values():
    print(i)

運行結果:

循環key-value:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
dic = {
    "k1" : 11,
    "k2" : 22,
    "k3" : 33
}

# 循環 鍵值對
for k,v in dic.items():
    print(k,v)

運行結果:

15.4-字典(dict)內部方法介紹:

clear(self):

說明:刪除字典中所有的元素。

#!/usr/bin/env python
# -*- coding:utf-8 -*-
dic = {
    "k1" : 11,
    "k2" : 22,
    "k3" : 33
}
print(dic)

# 清空字典
dic.clear()
print(dic)

運行結果:

copy(self):

說明:淺拷貝。

fromkeys(*args, **kwargs):

說明:創建一個新的字典,第一個元素為可迭代的對象,將其中的元素作為字典的鍵,第二個元素為字典所有鍵對應的值。

#!/usr/bin/env python
# -*- coding:utf-8 -*-
dic = dict.fromkeys(["k1","k2","k3"],123456)
print(dic)

運行結果:

簡單深入的例子:

#!/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)

運行結果:


注:默認生成一個字符串或者一個數字時,以上兩個之間是沒有區別的,但是如果生成的是一個列表或其它類型就有區別了。

#!/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)

# 在 空列表 里追加內容,通過 fromkeys 創建時,所有的鍵 共同對應著 同一個列表
dic1["k1"].append("11")
print("dic1",dic1)

# 每一個列表各自占一個內存
dic2["k1"].append("11")
print("dic2",dic2)

運行結果:

get(self, k, d=None):

說明:返回指定鍵的值, k 表示要指定的鍵, d 表示指定鍵不存在時返回的值,默認返回None。

#!/usr/bin/env python
# -*- coding:utf-8 -*-
dic = {
    "k1" : 11,
    "k2" : 22,
    "k3" : 33
}

# 返回 "k2" 的值
ret = dic.get("k2")
print(ret)

# 指定鍵不存在時,默認返回 None
ret2 = dic.get("k4")
print(ret2)

# 指定鍵不存在時,設置返回值
ret3 = dic.get("k4",0)
print(ret3)

運行結果:

items(self):

說明:將字典中的鍵值對組成元組,并放到列表中返回。

#!/usr/bin/env python
# -*- coding:utf-8 -*-
dic = {
    "k1" : 11,
    "k2" : 22,
    "k3" : 33
}

ret = dic.items()
print(ret)

運行結果:

keys(self):

說明:返回一個包含字典中鍵的列表。

#!/usr/bin/env python
# -*- coding:utf-8 -*-
dic = {
    "k1" : 11,
    "k2" : 22,
    "k3" : 33
}

ret = dic.keys()
print(ret)

運行結果:

pop(self, k, d=None):

說明:移除字典中指定鍵對應的值,并返回該鍵對應的值, k 表示指定的鍵, d 表示當鍵不存在又不想處理異常時填寫即可。

#!/usr/bin/env python
# -*- coding:utf-8 -*-
dic = {
    "k1" : 11,
    "k2" : 22,
    "k3" : 33
}

# 刪除 "k2" 并返回 "k2" 對應的值
ret = dic.pop("k2")
print(ret)
print(dic)

# 當 "k4" 不存在時,輸出 "0"
ret2 = dic.pop("k4",0)
print(ret2)

運行結果:

popitem(self):

說明:隨機刪除字典中一對鍵和值,并返回該鍵值對。

#!/usr/bin/env python
# -*- coding:utf-8 -*-
dic = {
    "k1" : 11,
    "k2" : 22,
    "k3" : 33
}

# 隨即刪除并返回
print(dic.popitem())
print(dic)

運行結果:

setdefault(self, k, d=None):

說明:如果指定鍵不存在,則創建鍵,如果存在則返回該鍵對應的值, k 表示指定的鍵, d 表示指定鍵不存在時,設置的默認值,默認為None。

#!/usr/bin/env python
# -*- coding:utf-8 -*-
dic = {
    "k1" : 11,
    "k2" : 22,
    "k3" : 33
}

# 指定鍵存在時,返回該鍵對應的值
ret1 = dic.setdefault("k2")
print(ret1)

# 指定鍵不存在時,則創建該鍵,該鍵默認值為 None
ret2 = dic.setdefault("k4")
print(ret2)

# 設置默認值
ret3 = dic.setdefault("k5",55)
print(ret3)
print(dic)

運行結果:

update(self, E=None, **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)

運行結果:

values(self):

說明:返回一個包含字典中值的列表。

#!/usr/bin/env python
# -*- coding:utf-8 -*-
dic = {
    "k1" : 11,
    "k2" : 22,
    "k3" : 33
}

ret = dic.values()
print(ret)

運行結果:

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)

運行結果:

既然可以通過 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)

運行結果:

15.6-刪除字典指定鍵值對:

通過 del 關鍵字刪除字典中指定的鍵值對。

#!/usr/bin/env python
# -*- coding:utf-8 -*-
dic = {
    "k1" : 11,
    "k2" : 22,
    "k3" : 33
}
print(dic)

# 刪除 "k1" 這個鍵值對
del dic["k1"]
print(dic)

運行結果:

15.7-enumerate()函數:

說明: enumerate(iterable, start=0) 根據可迭代對象創建枚舉對象,即同時返回索引和值, iterable 表示接受一個可迭代對象, start 表示指定索引的起始值,默認為0。

#!/usr/bin/env python
# -*- coding:utf-8 -*-
li = ["手機","電腦","汽車用品","圖書"]

# 起始值從 1 開始,默認為 0
for key,item in enumerate(li,1):
    print(key,item)

choice = int(input("請選取商品:"))

# 索引是從 0 開始的,只不過打印是從 1 開始的
# 所以選 1 的時候打印的還是電腦,所以可以讓輸入的值 -1
buy = li[choice-1]
print(buy)

運行結果:

15.8-練習題:

元素分類:

要求:有如下值集合[11,22,33,44,55,66,77,88,99,90]將所有大于 66 的值保存至字典的第一個key中,將小于 66 的值保存至第二個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" : []
}

# 循環 l1 并對里面每一個元素進行判斷
for i in l1:
    if i > 66:
        dic["k1"].append(i)
    else:
        dic["k2"].append(i)
print(dic)

運行結果:

通過for循環將列表轉換成字典:

#!/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))  # 上面的循環就是字典內部的本質,就是說這一句的本質就是上面的循環
# print(dic)

運行結果:

查找列表中符合條件元素:

要求:查找列表中元素,移除每個元素的空格,并查找以 a或A開頭 并且以 c 結尾的所有元素。

    li = ["alec", " aric", "Alex", "Tony", "rain"]
    tu = ("alec", " aric", "Alex", "Tony", "rain") 
    dic = {'k1': "alex", 'k2': ' aric',  "k3": "Alex", "k4": "Tony"}

注:以上三個任選其一即可。

列表:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
li = ["alec", " aric", "Alex", "Tony", "rain","abcd"]
for i in li:
    i = i.strip()

#if 判斷的順序是從前到后的,如果第一個條件為 True 后面跟著 or 就表示自己成功就行了,就不會去判斷后面的了
# 前面加一個括號,將這個括號當成了一個整體
    if (i.startswith("a") or i.startswith("A")) and i.endswith("c"):
        print(i)

運行結果:

元組:

#!/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)

運行結果:

字典:

#!/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)

運行結果:

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,527評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,687評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,640評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,957評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,682評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,011評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,009評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,183評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,714評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,435評論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,665評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,148評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,838評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,251評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,588評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,379評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,627評論 2 380

推薦閱讀更多精彩內容