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

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

python編程中,處理嵌套字典是常見操作。本文探討如何從三層嵌套字典中刪除最內層字典值完全相同的鍵。

問題描述: 給定一個三層嵌套字典,其最內層字典可能具有相同的值。目標是刪除所有最內層字典值完全相同的鍵。

示例:

輸入字典:

立即學習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 = {'l2':{'pop1':{'b':1}, 'pop2':{'b':1}, 'pop3':{'b':2}},          'l3':{'pop1':{'c':1}, 'pop2':{'c':2}, 'pop3':{'c':3}}}

在dict1中,’l1’鍵對應的最內層字典值都為{‘a’:1},因此需要刪除’l1’。

挑戰: 直接使用集合判斷字典值是否相同會報錯,因為字典是不可哈希的。

解決方案: 通過遍歷字典并逐個比較最內層字典值來解決。

代碼:

def remove_identical_inner_dicts(input_dict):     """     刪除三層嵌套字典中內層字典值完全相同的鍵。      Args:         input_dict: 輸入的三層嵌套字典。     """     # 創建一個副本,避免修改原始字典     working_dict = input_dict.copy()       for key, value in working_dict.items():         inner_dicts = list(value.values())  # 獲取所有內層字典         if all(inner_dicts[0] == inner_dict for inner_dict in inner_dicts): # 判斷所有內層字典是否相同             del input_dict[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_identical_inner_dicts(dict1) print(dict1)  # 輸出dict2

此函數首先復制輸入字典,然后迭代每一項。它提取所有內層字典并使用all()函數檢查它們是否完全相同。如果是,則從原始字典中刪除相應的鍵。 這避免了修改字典的同時迭代的錯誤。

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