清除同一字典中的重复项

Clean-up duplicates from the same dictionary

我正在使用 Pycharm 但它在我的代码中检测到一些重复代码,但棘手的是,重复项在字典常量中,我如何在字典本身中解决这个问题以删除重复项:

下面是我的代码:

    CONSTANT = {
    GMBH_CO_KGAA: {
        OWNER_PREFIX: {
            'min': 2,
            'max': None,
            'roles': [ROLE_OWNER_PERSON, ROLE_OWNER_COMPANY],
        }
    },
    GMBH_CO_KG: {
        OWNER_PREFIX: {
            'min': 2,
            'max': None,
            'roles': [ROLE_OWNER_PERSON, ROLE_OWNER_COMPANY],
        }
    }
}

    

他们显示 GMBH_CO_KGAAGMBH_CO_KG 的副本,我该如何清理这段代码?

这可能不是最有效的方法,但它有效:

ROLE_OWNER_PERSON = 'person'
ROLE_OWNER_COMPANY = 'company'

CONSTANT = {
    'GMBH_CO_KGAA': {
        'OWNER_PREFIX': {
            'min': 2,
            'max': None,
            'roles': [ROLE_OWNER_PERSON, ROLE_OWNER_COMPANY],
        }
    },
    'GMBH_CO_KG': {
        'OWNER_PREFIX': {
            'min': 2,
            'max': None,
            'roles': [ROLE_OWNER_PERSON, ROLE_OWNER_COMPANY],
        }
    }
}

####### Solution #######

no_duplicated_dict = {}

for key,value in CONSTANT.items():
    if value not in no_duplicated_dict.values():
        no_duplicated_dict[key] = value
        
print(no_duplicated_dict)

我找到了解决方案

EXTRACTED = {
        'OWNER_PREFIX': {
            'min': 2,
            'max': None,
            'roles': [ROLE_OWNER_PERSON, ROLE_OWNER_COMPANY],
        }
    }

    CONSTANT = {
        'GMBH_CO_KGAA': EXTRACTED,
        'GMBH_CO_KG': EXTRACTED
    }

你可以使用deepdiff,我发现一般来说获取(嵌套)对象的差异非常方便并且干净的代码:

安装:

pip install deepdiff

然后

import deepdiff
import json
ROLE_OWNER_PERSON = 'person'
ROLE_OWNER_COMPANY = 'company'

GMBH_CO_KGAA= {
        'OWNER_PREFIX': {
            'min': 3,
            'max': None,
            'roles': [ROLE_OWNER_PERSON, ROLE_OWNER_COMPANY],
        }
    }
GMBH_CO_KG= {
        'OWNER_PREFIX': {
            'min': 2,
            'max': None,
            'roles': [ROLE_OWNER_PERSON, ROLE_OWNER_COMPANY],
        }
    } 
          

diff = deepdiff.DeepDiff(GMBH_CO_KGAA, GMBH_CO_KG)
print(json.dumps(diff, indent=4))

输出:

{
"values_changed": {
    "root['OWNER_PREFIX']['min']": {
        "new_value": 2,
        "old_value": 3
       }
    }

}

但如果两者相似:

GMBH_CO_KGAA= {
    'OWNER_PREFIX': {
        'min': 2,
        'max': None,
        'roles': [ROLE_OWNER_PERSON, ROLE_OWNER_COMPANY],
    }
}
GMBH_CO_KG= {
        'OWNER_PREFIX': {
            'min': 2,
            'max': None,
            'roles': [ROLE_OWNER_PERSON, ROLE_OWNER_COMPANY],
        }
    } 

输出:

{}