清除同一字典中的重复项
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_KGAA 是 GMBH_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],
}
}
输出:
{}
我正在使用 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_KGAA 是 GMBH_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],
}
}
输出:
{}