Python中的字典

ii_chengzi發表於2018-07-16

一、什麼是字典?

字典是另外一種可變容器型別,並且可以儲存任意型別物件。列表元素進行修改的話,通過索引進行修改,如果當前元素的順序發生改變,此時還需要修改索引才能成功完成元素的修改。

字典是Pytho 中唯一的對映型別。

  • 字典建立語法:字典的建立使用{},每個鍵值對用冒號(:)分割,每對之間用逗號分隔。
  • 字典的鍵必須獨一無二,而值可以取任何資料型別,但必須是不可變的。
字典名={key1:value1,key2:value2}
  • 示例
student = {'name': 'HunterArley', 'age': 24}

# 空字典
empty = {}

dict1 = dict(F=70, i=105, s=115, h=104, C=67)
print(dict1)

二、操作字典

2.1、訪問字典

字典中根據鍵訪問值,可以指定字典名和放在方括號內的鍵。

student = {'name': 'HunterArley', 'age': 24}
print(student['name'])

2.2、修改字典元素

字典元素是可以修改的,通過key找到具體元素之後,給一個新的元素值即可。

student = {'name': 'HunterArley', 'age': 24}
student['age'] = 25
print(student)

2.3、新增元素

動態的向字典中新增元素的時候,只要新增的鍵在字典中不存在,就會新增這個元素。

student = {'name': 'HunterArley', 'age': 24}
student['sex'] = '男'
print(student)

2.4、刪除元素

  1. 使用del語句刪除元素:del既可以刪除指定的字典元素,也可以刪除整個字典,如果不指定key,代表刪除整個字典。
del  字典名[key]
  1. 使用clear()方法清空整個字典:被清空的字典最後會剩下一個空的字典,而用del刪除的字典在程式當中就不存在了。
字典名.clear()

三、字典函式

函式 描述 示例
len(dict) 計算字典中的元素的個數 student = {'name': 'HunterArley', 'age': 24} print(len(student))
str(dict) 輸出字典,用可列印的字串表示 student = {'name': 'HunterArley', 'age': 24} print(str(student))
type(variable) 返回輸入變數的資料型別 student = {'name': 'HunterArley', 'age': 24} print(type(student))
dict.fromkeys(seq[,value]) 建立一個新字典,以序列seq中元素做字典的值,value為字典所有鍵對應的初始值 seq=('name','age','sex') dict1=dict.fromkeys(seq)print("新字典為:",dict1) dict2=dict.fromkeys(seq,'jack’) print("新字典為:",dict2) 輸出結果:新字典為: {'name': None, 'age': None, 'sex': None}新字典為: {'name': 'jack', 'age': 'jack', 'sex': 'jack'}
dict.get(key,default=None) 返回指定鍵的值,如果值不在字典中返回default值 dict1={'name':'tom','age':18} print ("age鍵的值為 : " ,dict1.get('age', 9)) print ("sex鍵的值為 : " ,dict1.get('sex', '男')) 輸出結果:age鍵的值為 : 18 sex鍵的值為 : 男
key in dict 如果鍵在字典dict裡返回true,否則返回false dict1={'name':['tom','jack'],'age':18,'sex':'男',18:19} if 'name' in dict1: print("鍵name在字典中存在") else: print("鍵name在字典中不存在") 輸出結果: 鍵name在字典中存在
dict.keys() 以列表返回一個字典所有的鍵 dict1={'name':['tom','jack'],'age':18,'sex':'男',18:19} print(dict1.keys()) 輸出結果: dict_keys(['name', 'age', 'sex', 18])
dict.setdefault(key,default=None) 和get類似,但如果鍵不存在於字典中,將會新增鍵並將值設為default dict1={'name':'tom','age':18} print ("age鍵的值為 : " ,dict1.setdefault('age', 9)) print ("sex鍵的值為 : " ,dict1.setdefault('sex', '男’)) print ("新字典為:",dict1) 輸出結果: age鍵的值為 : 18 sex鍵的值為 : 男 新字典為: {'name': 'tom', 'age': 18, 'sex': '男’}
dict.values() 以列表返回一個字典中的所有值 dict1={'name':'tom','age':18} print(dict1.values()) 輸出結果: dict_values(['tom', 18])
'''
    fromkeys()方法用於建立並返回一個新的字典,它有兩個引數:
    第一個引數是字典的鍵,第二個引數是可選的,是傳入健對應的值。
'''
dict1 = {}

print(dict1.fromkeys((1, 2, 3)))

# {1: None, 2: None, 3: None}

dict2 = {}

print(dict2.fromkeys((1, 2, 3), 'Number'))
# {1: 'Number', 2: 'Number', 3: 'Number'}

dict3 = {}
print(dict3.fromkeys((1, 2, 3), ('one', 'two', 'three')))
# {1: ('one', 'two', 'three'), 2: ('one', 'two', 'three'), 3: ('one', 'two', 'three')}
'''
    keys()用於返回字典中的鍵
    values()用於返回字典中所有的值
    items()用於返回字典中所有的鍵值對
'''
dict1 = {}
dict1 = dict1.fromkeys(range(10), '贊')
print(dict1.keys())
# dict_keys([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
print(dict1.values())
# dict_values(['贊', '贊', '贊', '贊', '贊', '贊', '贊', '贊', '贊', '贊'])
print(dict1.items())
#dict_items([(0, '贊'), (1, '贊'), (2, '贊'), (3, '贊'), (4, '贊'), (5, '贊'), (6, '贊'), (7, '贊'), (8, '贊'), (9, '贊')])
'''
    get()方法提供了更寬鬆的方式去訪問字典項
'''
print(dict1.get(9))
# 贊
print(dict1.get(100))
# None
print(dict1.get(100, '木有'))
# 木有

# 如果不知道一個鍵是否在字典中,可以使用成員資格操作符來判斷(in 或者 not in)
print(9 in dict1)
# True
print(100 in dict1)
# False

# 如果需要清空一個字典,則使用clear()方法
dict1.clear()
print(dict1)
# {}
'''
    copy()方法是複製字典(淺拷貝)
'''
a = {1: 'one', 2: 'two', 3: 'three'}
b = a.copy()
print(id(a))
# 4332198360
print(id(b))
# 4366785056
a[1] = 'four'
print(a)
# {1: 'four', 2: 'two', 3: 'three'}
print(b)
# {1: 'one', 2: 'two', 3: 'three'}
'''
    pop()是給定鍵彈出對應的值;
    popitem()是彈出一個項;
'''
a = {1: 'one', 2: 'two', 3: 'three', 4: 'four'}
print(a.pop(2))
# two
print(a)
# {1: 'one', 3: 'three', 4: 'four'}
print(a.popitem())
# (4, 'four')
print(a)
# {1: 'one', 3: 'three'}
'''
    setdefault()在字典中找不到相應的鍵時會自動新增;
'''
a = {1: 'one', 2: 'two', 3: 'three', 4: 'four'}
print(a.setdefault(3))
# three
print(a.setdefault(5))
# None
print(a)
# {1: 'one', 2: 'two', 3: 'three', 4: 'four', 5: None}

四、淺拷貝與深拷貝

Python中string、tuple和number是不可變物件,而dict、list等是可變物件;不可變物件在進行重新賦值的時候,實際上是將原始值丟棄,將變數指向一個新值;可變物件的可變性實質上是指更改可變物件中的子物件,比如list中的item元素的更改。

  1. 直接賦值:其實就是物件的引用(別名)。
  2. 淺拷貝:不拷貝子物件(針對子物件中的item),當子物件進行更改的時候,原始物件也會改變。
  • 列表的切片操作
  • list()操作
  • copy()函式
  • copy模組的copy()函式
  1. 深拷貝:會拷貝子物件,當原始物件的子物件進行更改的時候,原始物件不會改變。
  • copy模組的deepcopy()函式

學海無涯苦作舟

4625756-9598be40d7ed5f90.jpg
Android成長錄.jpg

相關文章