python三層嵌套字典鍵值刪除:高效解決方案
本文探討如何處理Python中三層嵌套字典的鍵值刪除問題。 目標(biāo)是刪除最外層字典中,其對應(yīng)的最內(nèi)層字典值完全相同的鍵。
問題描述
給定一個三層嵌套字典,例如:
dict1 = {'l1':{'pop1':{'a':1}, 'pop2':{'a':1}, 'pop3':{'a':1}}, 'l2':{'pop1':{'b':1}, 'pop2':{'b':1}, 'pop3':{'b':2}}, 'l3':{'pop1':{'c':1}, 'pop2':{'c':2}, 'pop3':{'c':3}}}
需要刪除最內(nèi)層字典值完全相同的鍵(例如’l1’),得到:
dict2 = {'l2':{'pop1':{'b':1}, 'pop2':{'b':1}, 'pop3':{'b':2}}, 'l3':{'pop1':{'c':1}, 'pop2':{'c':2}, 'pop3':{'c':3}}}
優(yōu)化后的解決方案
直接使用all()函數(shù)檢查字典值是否相同效率較低,特別是對于大型字典。 以下代碼提供一個更優(yōu)化的解決方案,利用json.dumps()將字典轉(zhuǎn)換為可哈希的字符串進(jìn)行比較:
立即學(xué)習(xí)“Python免費學(xué)習(xí)筆記(深入)”;
import json def remove_replicated(o_d): d_c = o_d.copy() # 創(chuàng)建副本避免修改原字典 keys_to_remove = set() for k, v in d_c.items(): inner_values = [json.dumps(inner_v) for inner_v in v.values()] # 轉(zhuǎn)換為可哈希字符串 if len(set(inner_values)) == 1: # 使用集合判斷唯一性,效率更高 keys_to_remove.add(k) for k in keys_to_remove: del o_d[k] # 使用示例 dict1 = {'l1':{'pop1':{'a':1}, 'pop2':{'a':1}, 'pop3':{'a':1}}, 'l2':{'pop1':{'b':1}, 'pop2':{'b':1}, 'pop3':{'b':2}}, 'l3':{'pop1':{'c':1}, 'pop2':{'c':2}, 'pop3':{'c':3}}} remove_replicated(dict1) print(dict1)
此方法首先將最內(nèi)層字典的值轉(zhuǎn)換為可哈希的JSON字符串,然后使用集合set()高效地檢查唯一性。 這避免了重復(fù)的比較,顯著提高了效率,尤其是在處理大型嵌套字典時。 使用集合判斷唯一性比all()效率更高。 此外,代碼也更簡潔易懂。
此優(yōu)化后的函數(shù)remove_replicated在處理大量數(shù)據(jù)時性能會更好,并且代碼更清晰、更易于維護(hù)。
? 版權(quán)聲明
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載。
THE END