天天看點

捋一捋Python中的Dict(下)dict 的元素定位(鍵/值定位)和周遊總結

學委前面展示dict的概念和增删查改!這次我們把其他函數介紹補充了。

捋一捋Python中的Dict(下)dict 的元素定位(鍵/值定位)和周遊總結

dict 的元素定位(鍵/值定位)和周遊

dict這種對象我們可以通過 keys() 擷取所有的鍵的清單;

dict這種對象我們可以通過 values() 擷取所有的值的清單.

這樣有清單我們可以周遊整個dict對象。

但是更多使用下面的風格:

mydict = {
    'name': 'leixuewei',
    'date': '20211104'
}
print("周遊字典-----開始")
for k, v in mydict.items():
    print("key[%s] = value[%s]" % (k, v))  # 直接列印
print("周遊字典-----結束")
      

這幾行代碼是可以直接複制運作。

下面學委準備了更加全面的代碼,展示了擷取key/value和周遊操作等:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2021/11/3 11:34 下午
# @Author : LeiXueWei
# @CSDN/Juejin/Wechat: 雷學委
# @XueWeiTag: CodingDemo
# @File : dict_demo3.py
# @Project : hello


# 比如學委的資訊作為一個字典
info_dict = dict()
info_dict['name'] = 'LEI_XUE_WEI'  # 或者改為 'levin'
info_dict['blogs'] = '93'  # 目前發表了93個部落格文字。
info_dict['gongzhong_hao'] = '【雷學委】'  # 歡迎過來關注支援
info_dict['meta-data'] = dict()

print("包含特定key ?%s" % ('gongzhong_hao' in info_dict))

print('所有鍵的清單:%s ' % info_dict.keys())
print('所有值的清單:%s ' % info_dict.values())

print('擷取key對應的值:', info_dict['name'])

# 擷取但是不設定到info_dict内
print('擷取key DemoKey 對應的值:', info_dict.get('DemoKey', '匿名使用者雷學委'))
# print('擷取key對應的值:', info_dict['DemoKey']) #這句會抛出異常:KeyError: 'DemoKey'

# 如果沒有某個key,進行設定預設值并傳回
print('擷取key name對應的值:', info_dict.setdefault('name', '匿名使用者雷學委'))
print('擷取key DemoKey 對應的值:', info_dict.setdefault('DemoKey', '匿名使用者雷學委'))
print('擷取key DemoKey 對應的值:', info_dict['DemoKey'])

print("周遊字典-----開始")
for key, value in info_dict.items():
    print("\tkey[%s] = value[%s]" % (key, value))
print("周遊字典-----結束")

info_dict.clear()  # 清空整個字典對象

      

效果如下:

捋一捋Python中的Dict(下)dict 的元素定位(鍵/值定位)和周遊總結

這些操作都是比較基礎,但是必須随手就來的,是以必須敲熟了。

dict的複制(拷貝)

字典的複制可以通過copy函數來實作,但是它是淺拷貝,也就是拷貝了但不完全拷貝

簡單來說就是拷貝key,但是新字典的值還是沿用舊字典的值的引用。

這裡也順帶提一提fromkeys函數,這個建立的新字典,隻照搬了key清單,新字典内所有值都是空的。

說這麼多,我們看看字典的代碼示例:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2021/11/3 11:34 下午
# @Author : LeiXueWei
# @CSDN/Juejin/Wechat: 雷學委
# @XueWeiTag: CodingDemo
# @File : dict_demo4.py
# @Project : hello

'''dict的拷貝問題'''
# 比如學委的資訊作為一個字典
info_dict = dict()
info_dict['name'] = 'LEI_XUE_WEI'  # 或者改為 'levin'
info_dict['blogs'] = '93'  # 目前發表了93個部落格文字。
info_dict['gongzhong_hao'] = '【雷學委】'  # 歡迎過來關注支援
info_dict['meta-data'] = dict()

# 選擇指定key清單局部拷貝
keys_copied_dict = info_dict.fromkeys(['name', 'blogs', 'zone'])
print("keys_copied_dict :", keys_copied_dict)

# 淺拷貝//Shadow Copy: 全拷貝但不完全拷貝
copied_dict = info_dict.copy()
print("copied_dict :", copied_dict)

shadow_copied_dict = info_dict.copy()
print('shadow_copied_dict:', shadow_copied_dict)

## 雷學委提示:下面一行代碼修改了‘meta-data'這個key對應的值,我們并沒有直接修改shadow_copied_dict
info_dict['meta-data']['date'] = '04 Nov 2021'

print('info_dict:', info_dict)
print('shadow_copied_dict:', shadow_copied_dict) # 這裡輸出看到變化也傳遞給了 shadow_copied_dict


print("*"*16 + "清空info_dict")
info_dict.clear()
print('info_dict:', info_dict)  # clear 清空元素後 列印info_dict
print('shadow_copied_dict:', shadow_copied_dict)  # clear 清空元素後列印 copied_dict
      
捋一捋Python中的Dict(下)dict 的元素定位(鍵/值定位)和周遊總結

總結

dict總體使用是非常流暢的除了拷貝的問題,下一篇學委會談談拷貝的問題。

希望初學者們把dict熟練掌握。