1. 程式人生 > >python 入門之 – 資料字典(十八)

python 入門之 – 資料字典(十八)

通過標題名稱可以知道,字典是用來查詢資料的,它是以 keyvalue 的形式存在的,在學習資料字典之前我來用幾個例子說明一下,如:

info = [
    ['張三',21,'男','程式設計師'],
    ['李四',18,'女','設計師'],
    ['王五',26,'男','策劃'],
    ['趙六',21,'男','實習生'],
]

這裡是一組人員的資訊,我現在要找到張三的資訊,個人資訊,並且我是不知道他在陣列的第幾個的,那麼這個時候我肯定要用迴圈了,如:

for i in info :
    if i[0]=='張三' :
        print
(i)

結果為:['張三', 21, '男', '程式設計師']

這樣是沒毛病的,但是 python 給我們提供了一種更加友好的資料型別,那就是標題裡面的 字典,這樣我其實一行程式碼就可以找到該資料,而不需要通過迴圈來操作三行程式碼了,我現在把資料結構型別改變一下如:

info = {
    "張三":[21,'男','程式設計師'],
    "李四":[18,'女','設計師'],
    "王五":[26,'男','策劃'],
    "趙六":[21,'男','實習生'],
}

上方資料結構就是 python 中的字典,其實有過程式設計基礎的朋友就知道了,他不就是一個 json

格式嗎,確實是這樣的,他就是 json 格式的,在 python 裡面 json 格式就是資料字典,那麼有了資料字典之後我在來查詢一下關於張三的資料,其實就簡單了,如:

print(info['張三'])

執行上方 print 之後在控制檯打印出來的資料就是這樣的了:[21, '男', '程式設計師'],這樣一來是不是簡介明瞭多了,我直接通過 info 這個物件集合的座標名就拿到了對應的資料。

python 的資料字典裡面有幾個至關重要的特性,必須要掌握的,如:

1、字典必須是由 {} 括號包裹住的
2、key:value 結構
3、key 必須是可 hash、且必須為不可變資料型別、必須唯一
4、可存放任意多個值、可修改、可以不唯一
5、無須
6、查詢速度快

python 中字典也是可以進行 增刪改查 的,以下有幾個在 python 中常用的字典方法:

增加:

info = {
    "張三":[21,'男','程式設計師'],
    "李四":[18,'女','設計師']
}

info["王五"]=[26,'男','策劃']

print(info)

輸出結果為:{'張三':[21,'男','程式設計師'],'李四':[18,'女','設計師'],'王五':[26,'男', 策劃']}

修改:

info = {
    "張三":[21,'男','程式設計師'],
    "李四":[18,'女','設計師'],
    "王五":[26,'男','策劃']
}

info["張三"] = [18,'男','程式設計師']
info["張三"][1] = '女'

print(info)

輸出結果為:{'張三':[18,'女','程式設計師'],'李四':[18,'女','設計師'],'王五':[26,'男','策劃']}

判斷一個屬性是否存在資料字典內:

info = {
    "張三":[21,'男','程式設計師'],
    "李四":[18,'女','設計師'],
    "王五":[26,'男','策劃']
}

"張三" in info

>> True

查詢:

info = {
    "張三":[21,'男','程式設計師'],
    "李四":[18,'女','設計師'],
    "王五":[26,'男','策劃']
}

info.get("張三") #通過 get() 方式查詢,如果找不到的話會返回一個 None

>> [21,'男','程式設計師']

info["李四"] #直接通過值查詢,如果找不到的話會報錯

>> [18,'女','設計師']

刪除:
關於刪除有好幾種方法,先來看看第一種:pop()

info = {
    "張三":[21,'男','程式設計師'],
    "李四":[18,'女','設計師'],
    "王五":[26,'男','策劃'],
    "趙六":[21,'男','實習生'],
}
info.pop("趙六") #刪除那個值,就把 key 值寫進去
print(info)

>> {'張三': [21, '男', '程式設計師'], '李四': [18, '女', '設計師'], '王五': [26, '男', '策劃']}

第二種:del

info = {
"張三":[21,'男','程式設計師'],
"李四":[18,'女','設計師'],
"王五":[26,'男','策劃'],
"趙六":[21,'男','實習生'],
}
del info["趙六"] #刪除那個值,就把 key 值寫進去
print(info)

>> {'張三': [21, '男', '程式設計師'], '李四': [18, '女', '設計師'], '王五': [26, '男', '策劃']}

以上兩種就是刪除的方法,關於刪除其實還有一種隨機刪除資料,只有在非常多資料的情況下,才會隨機刪除,這種資料量的大小我目前還不太清楚是多少,資料比較少的情況下會刪除最後一個,但是這種方法不常用,因為作為開發者來說,我們一般不回去隨機刪除,都是指定刪除我們不需要的資料,我還是把這種隨機刪除的方法記錄一下吧:popitem()

info = {
    "張三":[21,'男','程式設計師'],
    "李四":[18,'女','設計師'],
    "王五":[26,'男','策劃'],
}
info.popitem()
print(info)

>> {'張三': [21, '男', '程式設計師'], '李四': [18, '女', '設計師']}

以上常用的增刪改查就說完了,說白了,其實就是操作 json 資料,json 和陣列一樣都可以層層巢狀,如:

{
    "a":{
        "list":[
            {
                "a":"12312",
                "b":123,
                "c":[
                    {
                        "a":"b"
                    }
                ]
            }
        ]
    }
}

這就是常規的 json 格式了,如果還看不懂的朋友可以去了解一下什麼是 json,因為這個是必學的知識點,今後在資料庫裡面儲存的全部都是這種 json 格式,學 python 不可能不和資料庫打交道的。

除去以上常規的增刪改查方法,其實 python 還內建了幾個其他的方法,如:

clear() : 清空整個字典
copy() : 複製整個字典,和陣列(列表)當中一摸一樣的用法,這裡不細說,不知道的朋友可以去看我寫的python 入門十二章節和十四章節
keys() : 獲取整個字典中的 key 值
values() : 獲取整個字典中的 value 值
items() : 將整個字典轉成一個數組,並且數組裡面的 key 和 value 都以一個個的小元祖排序
update() : 將兩個元祖進行拼接
setdefault() : 往字典裡面新增 key~value ,如果發現 key 存在將會返回 key 的 value,否則就將資料新增進去
fromkeys() : 構造一個初始化的字典(json),並且返回

clear()

info = {
    "張三":[21,'男','程式設計師'],
    "李四":[18,'女','設計師'],
    "王五":[26,'男','策劃'],
}
info.clear()

print(info)

>> {}

keys()

info = {
    "張三":[21,'男','程式設計師'],
    "李四":[18,'女','設計師'],
    "王五":[26,'男','策劃'],
}
info.keys()

>> dict_keys(['張三', '李四', '王五']) #將獲取的 key 值變成了一個列表紮實

values()

info = {
    "張三":[21,'男','程式設計師'],
    "李四":[18,'女','設計師'],
    "王五":[26,'男','策劃'],
}
info.values()

>> dict_values([[21, '男', '程式設計師'], [18, '女', '設計師'], [26, '男', '策劃']])#將獲取的 value 值變成了一個列表紮實

items()

info = {
    "張三":[21,'男','程式設計師'],
    "李四":[18,'女','設計師'],
    "王五":[26,'男','策劃'],
}
info.items()

>> dict_items([('張三', [21, '男', '程式設計師']), ('李四', [18, '女', '設計師']), ('王五', [26, '男', '策劃'])])

update()

info = {
    "張三":[21,'男','程式設計師'],
    "李四":[18,'女','設計師'],
    "王五":[26,'男','策劃'],
}
info2 = {
    "趙六":[21,'男','程式設計師'],
    "李四":[30,'人妖','表演'],
}
info.update(info2)

print(info)

>> {'張三': [21, '男', '程式設計師'], '李四': [30, '人妖', '表演'], '王五': [26, '男', '策劃'], '趙六': [21, '男', '程式設計師']}

setdefault()

info = {
    "張三":[21,'男','程式設計師'],
    "李四":[18,'女','設計師'],
    "王五":[26,'男','策劃'],
}

info.setdefault('王五','123') #王五存在,將王五的 value 返回出來

>> [26,'男','策劃']

info.setdefault('趙六','123') #趙六不存在,沒有返回值,所以新增成功

print(info)

>> {'張三': [21, '男', '程式設計師'], '李四': [18, '女', '設計師'], '王五': [26, '男', '策劃'], '趙六': '123'}

fromkeys()

info = {}
info = info.fromkeys(['a','b','c'],'123') #第一個引數為陣列,定義一個表的key值,第二個值為初始化的value值,可以是任何型別的資料,如果不寫預設返回 None
print(info)

>> {'a': '123', 'b': '123', 'c': '123'}

以上就是 python 內建的所有字典的方法了,但是通過測試我發現其實字典和陣列一樣也是可以迴圈的,如:

info = {
    "張三":[21,'男','程式設計師'],
    "李四":[18,'女','設計師'],
    "王五":[26,'男','策劃'],
}

for i in info:
    print(i)

>> 張三
>> 李四
>> 王五

可以看到迴圈出來的只有 key 值,那麼我想要列印他的 value 值,可以進行如下操作

info = {
    "張三":[21,'男','程式設計師'],
    "李四":[18,'女','設計師'],
    "王五":[26,'男','策劃'],
}

for i in info:
    print(info[i])

>> [21,'男','程式設計師']
>> [18,'女','設計師']
>> [26,'男','策劃']

可以看到這樣就完美實現了迴圈資料字典,其實我只是用 JavaScript 的程式設計思路測試了一下,沒想到還真的成功了。

好了,今天的把 python 的資料字典以及操作方法全部學完了,每天一點進步,讓自己過的更加充實!