首頁 > 軟體

Python對映型別之dict詳解

2022-03-15 13:03:05

對映型別 — dict

字典可用多種方式來建立:

  • 使用花括號內以逗號分隔鍵: 值對的方式: {‘jack’: 4098, ‘sjoerd’: 4127} or {4098:‘jack’, 4127: ‘sjoerd’}
  • 使用字典推導式: {}, {x: x ** 2 for x in range(10)}
dict_a = {key: value for key in 'python' for value in range(2)}
list_phone = [('HUAWEI', '華為'), ('MI', '小米'), ('OPPO', 'OPPO'), ('VIVO', 'VIVO')]
dict_c = {key: value for key, value in list_phone}
  • 使用型別構造器: dict(), dict([(‘foo’, 100), (‘bar’, 200)]), dict(foo=100,bar=200)

字典所支援的操作:

list(d)

返回字典d 中使用的所有鍵的列表

len(d)

返回字典d 中的項數

d[key]

返回d 中以key 為鍵的項。如果對映中不存在key 則會引發KeyError。

如果字典的子類定義了方法__missing__() 並且key 不存在,則d[key] 操作將呼叫該方法並附帶鍵key 作為引數。d[key] 隨後將返回或引發__missing__(key) 呼叫所返回或引發的任何物件或異常。沒有其他操作或方法會發起呼叫__missing__()。如果未定義__missing__(),則會引發KeyError。missing() 必須是一個方法;它不能是一個範例變數:

>>> class Counter(dict):
... def __missing__(self, key):
... return 0
>>> c = Counter()
>>> c['red']
0
>>> c['red'] += 1
>>> c['red']
1

上面的例子顯示了collections.Counter 實現的部分程式碼。還有另一個不同的__missing__方法是由collections.defaultdict 所使用的。

d[key] = value

將d[key]設為value。

del d[key]

將d[key] 從d中移除。如果對映中不存在key 則會引發KeyError。

key in d

如果d中存在鍵key 則返回True,否則返回False。

iter(d)

返回以字典的鍵為元素的迭代器。這是iter(d.keys()) 的快捷方式。

clear()

移除字典中的所有元素。

copy()

返回原字典的淺拷貝

深copy

若你想徹底使2個dict完全獨立,無論有多少層資料。那就要用python工具包裡的一個工具了

import copy
data = {
    "name":"alex",
    "age":18,
    "scores":{
        "語文":130,
        "數學":60,
        "英語":98,
    }
}
d2 = data.copy()
d3 =copy.deepcopy(data)
d3["scores"]["語文"] = 149
print(d3)
print(data)

classmethod fromkeys(iterable[, value ]) fromkeys()

函數用於建立一個新字典,以序列 seq 中元素做字典的鍵,value 為字典所有鍵對應的初始值

seq = ('Google', 'Runoob', 'Taobao')
thisdict = dict.fromkeys(seq)
print "新字典為 : %s" %  str(dict)
thisdict = dict.fromkeys(seq, 10)
print "新字典為 : %s" %  str(thisdict)
"""
新的字典為 : {'age': None, 'name': None, 'sex': None}
新的字典為 : {'age': 10, 'name': 10, 'sex': 10}
"""

get(key[, default ])

如果key 存在於字典中則返回key 的值,否則返回default。如果default 未給出則預設為None,因而此方法絕不會引發KeyError。

items()

  • 以列表返回檢視物件,是一個可遍歷的key/value對
  • dict.keys()dict.values()dict.items() 返回的都是檢視物件( view objects),提供了字典實體的動態檢視,這就意味著字典改變,檢視也會跟著變化
tinydict = {'Name': 'Runoob', 'Age': 7}
print ("Value : %s" %  tinydict.items()) # Value : dict_items([('Age', 7), ('Name', 'Runoob')])

keys()

返回由字典鍵組成的一個新檢視

dict.keys()dict.values() dict.items() 返回的都是檢視物件( view objects),提供了字典實體的動態檢視,這就意味著字典改變,檢視也會跟著變化

a = {"a": 3, "b": 2}
print(a.keys()) # <class 'dict_keys'>

pop(key[, default ])

刪除字典給定鍵 key 所對應的值,返回值為被刪除的值。

site= {'name': '菜鳥教學', 'alexa': 10000, 'url': 'www.runoob.com'}
element = site.pop('name')
print('刪除的元素為:', element)
print('字典為:', site)
"""
刪除的元素為: 菜鳥教學
字典為: {'alexa': 10000, 'url': 'www.runoob.com'}
"""

popitem()

  • popitem() 方法隨機返回並刪除字典中的最後一對鍵和值。
  • 如果字典已經為空,卻呼叫了此方法,就報出KeyError異常。
  • 返回一個鍵值對(key,value)形式,按照 LIFO(Last In First Out後進先出法)順序規則,即最末尾的鍵值對。
site= {'name': '菜鳥教學', 'alexa': 10000, 'url': 'www.runoob.com'}
pop_obj=site.popitem()
print(pop_obj)  
print(site)

reversed(d)

返回一個逆序獲取字典鍵的迭代器。這是reversed(d.keys()) 的快捷方式

setdefault(key[, default ])

setdefault() 方法和 get()方法 類似, 如果鍵不存在於字典中,將會新增鍵並將值設為預設值。

tinydict = {'Name': 'Runoob', 'Age': 7}
print ("Age 鍵的值為 : %s" %  tinydict.setdefault('Age', None))
print ("Sex 鍵的值為 : %s" %  tinydict.setdefault('Sex', None))
print ("新字典為:", tinydict)

update([other ])

update() 函數把字典引數 dict2 的 key/value(鍵/值) 對更新到字典 dict 裡

tinydict = {'Name': 'Runoob', 'Age': 7}
tinydict2 = {'Sex': 'female' }
tinydict.update(tinydict2)
print ("更新字典 tinydict : ", tinydict)

values()

返回一個檢視物件,dict.keys()、dict.values() 和 dict.items() 返回的都是檢視物件( view objects),提供了字典實體的動態檢視,這就意味著字典改變,檢視也會跟著變化

a = {"a": 3, "b": 2}
print(a.values()) # dict_values([3, 2])

d | other

合併d 和other 中的鍵和值來建立一個新的字典,兩者必須都是字典。當d 和other 有相同鍵時,other 的值優先。3.9才支援

a = {"apple": 3, "banana": 4}b = {"grape": 5, "banana": 8}print(a | b)

d |= other

  • 用other 的鍵和值更新字典d ,other 可以是mapping 或iterable 的鍵值對。當d 和other 有相同鍵時,other 的值優先。
  • 3.9 新版功能
a = {"one": 1, "two": 2, "three": 3}
a |= {"three": 30, "four": 4, "five": 5}
print(a)
a = {"apple": 3, "banana": 4}
b = {"grape": 5, "banana": 8}
a |= b
print(a)
"""
{'one': 1, 'two': 2, 'three': 30, 'four': 4, 'five': 5}
{'apple': 3, 'banana': 8, 'grape': 5}
"""

總結

本篇文章就到這裡了,希望能夠給你帶來幫助,也希望您能夠多多關注it145.com的更多內容! 


IT145.com E-mail:sddin#qq.com