在Python中,如何從三層嵌套字典中刪除最里層具有相同值的鍵?

本文介紹了一種高效處理python三層嵌套字典的方法,該方法能夠根據特定條件刪除最內層具有相同值的鍵。 讓我們用更簡潔的語言重新闡述這個過程,并優化代碼。

問題: 如何從三層嵌套字典中刪除最內層字典值完全相同的鍵?

在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

代碼解釋:

  1. list(data.items()): 為了安全地迭代和修改字典,我們先將字典項轉換為列表。直接迭代字典并在迭代過程中修改字典會引發錯誤。

  2. inner_dicts = list(value.values()): 獲取當前第二層鍵的所有內層字典值。

  3. if all(inner_dicts[0] == inner_dict for inner_dict in inner_dicts):: 使用all()函數和生成器表達式高效地檢查所有內層字典是否相同。

  4. del data[key]: 如果所有內層字典相同,則刪除對應的第二層鍵。

這個改進后的代碼更簡潔、高效,并避免了潛在的錯誤。 它直接修改輸入字典,避免了創建副本帶來的額外內存消耗。 這種方法清晰地表達了問題的解決方案,并具有更好的可讀性和可維護性。

? 版權聲明
THE END
喜歡就支持一下吧
點贊5 分享