簡體   English   中英

使用 python 從嵌套字典中刪除重復項

[英]Remove duplicates from nested dictionary with python

我有這個嵌套字典。 字典的名稱已生成。

{
        "sphere": {
            1: "False",
            2: "False",
            3: "False",
            4: "True",
            5: "True",
            6: "False",
            7: "False",
            8: "False",
            9: "False",
        },
        "cube": {
            1: "True",
            2: "True",
            3: "False",
            4: "False",
            5: "False",
            6: "True",
            7: "True",
            8: "False",
            9: "False",
        },
        "torus": {
            1: "True",
            2: "True",
            3: "True",
            4: "False",
            5: "False",
            6: "False",
            7: "False",
            8: "True",
            9: "True",
        },
    }

我想刪除所有重復的值,但在字典中保留第一個和最后一個相等的值,並得到類似的結果:

{
    "sphere": {
        1: "False",
        3: "False",
        4: "True",
        5: "True",
        6: "False",
        9: "False",
    },
    "cube": {
        1: "True",
        2: "True",
        3: "False",
        5: "False",
        6: "True",
        7: "True",
        8: "False",
        9: "False",
    },
    "torus": {
        1: "True",
        3: "True",
        4: "False",
        7: "False",
        8: "True",
        9: "True",
    },
}

任何幫助將不勝感激。 謝謝

問題歸結為字典中重復項數量的減少。 第一次迭代字典很容易

new_dict = dict()
for key,value in outher_most_dictionary.items()
  new_cict[key] = dedup(value)

,!!請記住,這將按插入順序遍歷鍵、值解析!!! 現在dedup數據刪除需要做什么?

  • 創建新字典,比如說“tcid”
  • 遍歷傳遞字典的鍵值部分
  • 如果從未“看到”值,則將其添加到“tcid”
  • 如果值已經“看到”,則將其添加到“tcid”
  • 如果值已經“看到”超過 2 次,則跳過它
  • 返回“tcid”

這是一個循序漸進的方法:

import json

D = {
        "sphere": {
            1: "False",
            2: "False",
            3: "False",
            4: "True",
            5: "True",
            6: "False",
            7: "False",
            8: "False",
            9: "False"
        },
        "cube": {
            1: "True",
            2: "True",
            3: "False",
            4: "False",
            5: "False",
            6: "True",
            7: "True",
            8: "False",
            9: "False"
        },
        "torus": {
            1: "True",
            2: "True",
            3: "True",
            4: "False",
            5: "False",
            6: "False",
            7: "False",
            8: "True",
            9: "True"
        },
    }

def clean(v, dk):
    for k in dk[:-1]:
        del v[k]

def process(v):
    p = None
    dk = []
    for k in list(v.keys()):
        if v[k] == p:
            dk.append(k)
        else:
            clean(v, dk)
            p = v[k]
            dk = []
    clean(v, dk)


for v in D.values():
    process(v)

print(json.dumps(D, indent=2))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM