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