在python中,字典是一個(gè)很有特色的數(shù)據(jù)結(jié)構(gòu)。在實(shí)際開(kāi)發(fā)過(guò)程中字典的運(yùn)用相當(dāng)廣泛。但是,有些字典操作并不是那么好用,比如在字典中有一種業(yè)務(wù)運(yùn)用得比較多的操作,就是字典合并,今天我們就來(lái)介紹常用的字典合并的三種方法和python3.9新增的一種字典合并方法吧!
for 循環(huán)的方式
比較經(jīng)典的合并字典的方式是使用 for 循環(huán):
>>> a = {1: '編程獅', 2: 'W3Cschool'}
>>> b = {3: 'python', 4: 'java'}
>>> for k, v in b.items():
... a[k] = v
...
>>> a
{1: '編程獅', 2: 'W3Cschool', 3: 'python', 4: 'java'}
這種方法每次合并都要調(diào)用一次循環(huán),效率是比較低下的。
dict(a, **b) 的方式
大家都知道我們可以使用 **dict 的方式打開(kāi)一個(gè)字典類(lèi)型的數(shù)據(jù), 我們可以使用 dict 方法并借助這種方式實(shí)現(xiàn)兩個(gè)字典的合并:
>>> a = {1: '編程獅', 2: 'W3Cschool'}
>>> b = {3: 'python', 4: 'java'}
>>> dict(a, **b)
{1: '編程獅', 2: 'W3Cschool', 3: 'python', 4: 'java'}
【注意】此時(shí), 會(huì)返回一個(gè)新的字典。
這種使用占位符的方式對(duì)于已經(jīng)熟練掌握python編程的小伙伴來(lái)說(shuō)是比較簡(jiǎn)單的,但是對(duì)于剛開(kāi)始學(xué)習(xí)編程的小伙伴來(lái)說(shuō),這并不簡(jiǎn)潔易懂。
dict.update(other_dict) 的方式
直接調(diào)用字典的 update() 方法, 同樣可以將兩個(gè)字典合并:
>>> a = {1: '編程獅', 2: 'W3Cschool'}
>>> b = {3: 'python', 4: 'java'}
>>> a.update(b)
>>> a
{1: '編程獅', 2: 'W3Cschool', 3: 'python', 4: 'java'}
【注意】此時(shí)同樣實(shí)現(xiàn)了兩個(gè)字典的合并, 但是需要注意的是 a.update(b) 的方式并沒(méi)有返回一個(gè)新的字典, 而是將字典 a 進(jìn)行了 “更新”, 此時(shí)的返回值是 None。
這種方法雖然好用也易于理解,但實(shí)際上,還有更易于理解的方法:字典的合并可以理解為是字典的相加,在python3.9中新增了(新增內(nèi)置)|和|=兩種操作符,現(xiàn)在我們可以這樣干:
python3.9新增的操作符的方式:
在python3.9中,可以直接使用|或|=這兩種操作符,前者可以用來(lái)合并兩個(gè)字典(合并到右邊的字典內(nèi))
>>> a = {1: '編程獅', 2: 'W3Cschool'}
>>> b = {3: 'python', 4: 'java'}
>>> a|b
{1: '編程獅', 2: 'W3Cschool', 3: 'python', 4: 'java'}
當(dāng)字典中有相同的鍵的適合,會(huì)從左到右取最后出現(xiàn)的值。
|=的運(yùn)算類(lèi)似于+=,這個(gè)時(shí)候就會(huì)將字典合并到左邊的字典內(nèi)。
值得一提的是,|=不僅僅可以用于合并字典,也可以用于合并字典和別的類(lèi)型的數(shù)據(jù)(比如列表)。例如
>>> a = {1: '編程獅', 2: 'W3Cschool'}
>>> a |= [('python','java')]
>>> a
{1: '編程獅', 2: 'W3Cschool', 'python': 'java'}