本文介紹了一種高效處理python三層嵌套字典的方法,該方法能夠根據特定條件刪除最內層具有相同值的鍵。 讓我們用更簡潔的語言重新闡述這個過程,并優化代碼。
問題: 如何從三層嵌套字典中刪除最內層字典值完全相同的鍵?
示例:
輸入字典 dict1:
立即學習“Python免費學習筆記(深入)”;
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}}}
目標輸出字典 dict2:
dict2 = {'l2':{'pop1':{'b':1}, 'pop2':{'b':1}, 'pop3':{'b':2}}, 'l3':{'pop1':{'c':1}, 'pop2':{'c':2}, 'pop3':{'c':3}}}
解決方案:
以下代碼直接操作原字典,避免了不必要的復制,提高了效率:
def remove_replicated(data): for key, value in list(data.items()): # 使用list(data.items())避免修改字典的同時迭代 inner_dicts = list(value.values()) if all(inner_dicts[0] == inner_dict for inner_dict in inner_dicts): del data[key] 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) # 輸出dict2
代碼解釋:
-
list(data.items()): 為了安全地迭代和修改字典,我們先將字典項轉換為列表。直接迭代字典并在迭代過程中修改字典會引發錯誤。
-
inner_dicts = list(value.values()): 獲取當前第二層鍵的所有內層字典值。
-
if all(inner_dicts[0] == inner_dict for inner_dict in inner_dicts):: 使用all()函數和生成器表達式高效地檢查所有內層字典是否相同。
-
del data[key]: 如果所有內層字典相同,則刪除對應的第二層鍵。
這個改進后的代碼更簡潔、高效,并避免了潛在的錯誤。 它直接修改輸入字典,避免了創建副本帶來的額外內存消耗。 這種方法清晰地表達了問題的解決方案,并具有更好的可讀性和可維護性。
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END