【问题标题】:Remove duplicates from nested dictionary with python使用python从嵌套字典中删除重复项
【发布时间】:2022-01-09 01:19:51
【问题描述】:

我有这个嵌套字典。字典名称已生成。

{
        "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",
    },
}

任何帮助将不胜感激。 谢谢

【问题讨论】:

  • 输出示例中有很多重复值。你能说得更具体点吗?
  • 请提供有关您的重复值过滤的更多详细信息
  • 我需要成对的键,第一个和最后一个值相等。就像在字典“球体”中一样,我在 6 到 9 的键中具有相同的值,所以我想在结果中只保留 6 和 9 个键。

标签: python dictionary nested


【解决方案1】:

问题归结为字典中重复项的数量减少。 第一次迭代字典很容易

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

!!!记住这将按插入顺序遍历键、值解析!!! 现在dedup 函数需要做什么?

  • 创建新字典,比如说“tcid”
  • 遍历传递字典的键值部分
  • 如果值从未“见过”,则将其添加到“tcid”
  • 如果值一旦添加到“tcid”中就已经“看到”了
  • 如果值已经“看到”超过 2 次,则跳过它
  • 返回“tcid”

【讨论】:

  • 现在我又看到了一个问题。我假设 1:“True”,2:“True”,3:“False”,是插入顺序,否则它不会按预期工作
【解决方案2】:

这是一个循序渐进的方法:

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))

【讨论】:

  • 谢谢,它对我来说非常有效!现在我将尝试了解这段代码的作用:)
猜你喜欢
  • 2018-04-14
  • 1970-01-01
  • 1970-01-01
  • 2019-09-08
  • 1970-01-01
  • 2014-01-28
  • 1970-01-01
  • 2021-02-23
  • 2019-11-18
相关资源
最近更新 更多