總結十個Python 字典用法的使用技巧

roc_guo發表於2022-02-08

字典(Dictionary)是Python提供的一種常用的資料結構,它用於存放具有對映關係的資料,由鍵(key)和值(value)成對組成,鍵和值中間以冒號:隔開,項之間用逗號隔開,整個字典由大括號{}括起來,格式如下:

dic = {key1 : value1, key2 : value2 }

字典也被稱作關聯陣列或雜湊表,下面是幾種常見的字典建立方式:

# 方法1
dic1 = { 'Author' : 'Python' , 'age' : 99 , 'sex' : '男' }
 
# 方法2
lst = [('Author', 'Python'), ('age', 99), ('sex', '男')]
dic2 = dict(lst)
 
# 方法3
dic3 = dict( Author = 'Python', age = 99, sex = '男')
 
# 方法4
list1 = ['Author', 'age', 'sex']
list2 = ['Python', 99, '男']
dic4 = dict(zip(list1, list2))

字典建立的方式還有很多種,這裡不再贅述。

字典由 dict 類代表,可以使用 dir(dict) 來檢視該類包含哪些方法,輸入 ,可以看到如下輸出結果:

print('methods = ',methods)
 
methods = ['__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']

字典的方法和屬性有很多種,這裡我們重點介紹以下11種方法:

['clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']
1.dict.clear()

clear() 用於清空字典中所有元素(鍵-值對),對一個字典執行 clear() 方法之後,該字典就會變成一個空字典:

list1 = ['Author', 'age', 'sex']
list2 = ['Python', 99, '男']
dic1 = dict(zip(list1, list2))
# dic1 = {'Author': 'Python', 'age': 99, 'sex': '男'}
 
dic1.clear()
# dic1 = {}
2.dict.copy()

copy() 用於返回一個字典的淺複製:

list1 = ['Author', 'age', 'sex']
list2 = ['Python', 99, '男']
dic1 = dict(zip(list1, list2))
 
dic2 = dic1 # 淺複製: 引用物件
dic3 = dic1.copy() # 淺複製:深複製父物件(一級目錄),子物件(二級目錄)不複製,還是引用
dic1['age'] = 18
 
# dic1 = {'Author': 'Python', 'age': 18, 'sex': '男'}
# dic2 = {'Author': 'Python', 'age': 18, 'sex': '男'}
# dic3 = {'Author': 'Python', 'age': 99, 'sex': '男'}

其中 dic2 是 dic1 的引用,所以輸出結果是一致的,dic3 父物件進行了深複製,不會隨dic1 修改而修改,子物件是淺複製所以隨 dic1 的修改而修改,注意父子關係。

擴充深複製:copy.deepcopy()

import copy
 
list1 = ['Author', 'age', 'sex']
list2 = ['Python', [18,99], '男']
dic1 = dict(zip(list1, list2))
 
dic2 = dic1
dic3 = dic1.copy()
dic4 = copy.deepcopy(dic1)
dic1['age'].remove(18)
dic1['age'] = 20
 
# dic1 = {'Author': 'Python', 'age': 20, 'sex': '男'}
# dic2 = {'Author': 'Python', 'age': 20, 'sex': '男'}
# dic3 = {'Author': 'Python', 'age': [99], 'sex': '男'}
# dic4 = {'Author': 'Python', 'age': [18, 99], 'sex': '男'}

dic2 是 dic1 的引用,所以輸出結果是一致的;dic3 父物件進行了深複製,不會隨dic1 修改而修改,子物件是淺複製所以隨 dic1 的修改而修改;dic4 進行了深複製,遞迴複製所有資料,相當於完全在另外記憶體中新建原字典,所以修改dic1不會影響dic4的資料

3.dict.fromkeys()

fromkeys() 使用給定的多個鍵建立一個新字典,值預設都是 None,也可以傳入一個引數作為預設的值:

list1 = ['Author', 'age', 'sex']
dic1 = dict.fromkeys(list1)
dic2 = dict.fromkeys(list1, 'Python')
 
# dic1 = {'Author': None, 'age': None, 'sex': None}
# dic2 = {'Author': 'Python', 'age': 'Python', 'sex': 'Python'}
4.dict.get()

get() 用於返回指定鍵的值,也就是根據鍵來獲取值,在鍵不存在的情況下,返回 None,也可以指定返回值:

list1 = ['Author', 'age', 'sex']
list2 = ['Python', [18,99], '男']
dic1 = dict(zip(list1, list2))
 
Author = dic1.get('Author')
# Author = Python
phone = dic1.get('phone')
# phone = None
phone = dic1.get('phone','12345678')
# phone = 12345678
5.dict.items()

items() 獲取字典中的所有鍵-值對,一般情況下可以將結果轉化為列表再進行後續處理:

list1 = ['Author', 'age', 'sex']
list2 = ['Python', [18,99], '男']
dic1 = dict(zip(list1, list2))
items = dic1.items()
print('items = ', items)
print(type(items))
print('items = ', list(items))
 
# items = dict_items([('Author', 'Python'), ('age', [18, 99]), ('sex', '男')])
## items = [('Author', 'Python'), ('age', [18, 99]), ('sex', '男')]
6.dict.keys()

keys() 返回一個字典所有的鍵:

list1 = ['Author', 'age', 'sex']
list2 = ['Python', [18,99], '男']
dic1 = dict(zip(list1, list2))
keys = dic1.keys()
print('keys = ', keys)
print(type(keys))
print('keys = ', list(keys))
 
# keys = dict_keys(['Author', 'age', 'sex'])
## keys = ['Author', 'age', 'sex']
7.dict.pop()

pop() 返回指定鍵對應的值,並在原字典中刪除這個鍵-值對:

list1 = ['Author', 'age', 'sex']
list2 = ['Python', [18,99], '男']
dic1 = dict(zip(list1, list2))
sex = dic1.pop('sex')
print('sex = ', sex)
print('dic1 = ',dic1)
 
# sex = 男
# dic1 = {'Author': 'Python', 'age': [18, 99]}
8.dict.popitem()

popitem() 刪除字典中的最後一對鍵和值:

list1 = ['Author', 'age', 'sex']
list2 = ['Python', [18,99], '男']
dic1 = dict(zip(list1, list2))
dic1.popitem()
print('dic1 = ',dic1)
 
# dic1 = {'Author': 'Python', 'age': [18, 99]}
9.dict.setdefault()

setdefault() 和 get() 類似, 但如果鍵不存在於字典中,將會新增鍵並將值設為default:

list1 = ['Author', 'age', 'sex']
list2 = ['Python', [18,99], '男']
dic1 = dict(zip(list1, list2))
dic1.setdefault('Author', '')
print('dic1 = ',dic1)
# dic1 = {'Author': 'Python', 'age': [18, 99], 'sex': '男'}
dic1.setdefault('name', '')
print('dic1 = ',dic1)
# dic1 = {'Author': 'Python', 'age': [18, 99], 'sex': '男', 'name': ''}
10.dict.update(dict1)

update() 字典更新,將字典dict1的鍵-值對更新到dict裡,如果被更新的字典中己包含對應的鍵-值對,那麼原鍵-值對會被覆蓋,如果被更新的字典中不包含對應的鍵-值對,則新增該鍵-值對:

list1 = ['Author', 'age', 'sex']
list2 = ['Python', [18,99], '男']
dic1 = dict(zip(list1, list2))
print('dic1 = ',dic1)
# dic1 = {'Author': 'Python', 'age': [18, 99], 'sex': '男'}
 
list3 = ['Author', 'phone' ]
list4 = ['', 12345678]
dic2 = dict(zip(list3, list4))
print('dic2 = ',dic2)
# dic2 = {'Author': '', 'phone': 12345678}
 
dic1.update(dic2)
print('dic1 = ',dic1)
# dic1 = {'Author': '', 'age': [18, 99], 'sex': '男', 'phone': 12345678}
11.dict.values()

values() 返回一個字典所有的值:

list1 = ['Author', 'age', 'sex']
list2 = ['Python', [18,99], '男']
dic1 = dict(zip(list1, list2))
values = dic1.values()
print('values = ', values)
print(type(values))
print('values = ', list(values))
 
# values = dict_values(['Python', [18, 99], '男'])
## values = ['Python', [18, 99], '男']

到此這篇關於Python 十個字典用法使用技巧歸納的文章就介紹到這了。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69901823/viewspace-2854809/,如需轉載,請註明出處,否則將追究法律責任。

相關文章