【问题标题】:Except equivalent in python for nested dicts除了 Python 中的嵌套字典等价物
【发布时间】:2015-07-16 16:37:13
【问题描述】:

我有两个大型嵌套字典,格式为

dictOne = "key1": {
               "key2": {}
               "key3": {
                    "key4" : {data...}
               }
           }

dictTwo = "key1": {
               "key2": {}
           }

除了它们有数千行长之外,一些字典嵌套了 10-15 层。 我想找到一种方法将它们组合在一起,类似于 SQL 中的 EXCEPT。我希望从 dictOne 中删除 dictTwo 中显示的任何键,但前提是该键下的 dict 没有子级。 所以在这种情况下,结果字典将是

    dictRes = "key1": {
                  "key3": {
                      "key4" : {data...}
                   }
               }

我假设没有简单的方法可以做到这一点,但我希望有人可以为我指明正确的方向,以制定一种可以实现这一目标的方法

【问题讨论】:

  • 15 级深度字典?这不是一个好的设计。也许更需要重写代码。
  • 您的预期输出示例是什么?
  • 它需要表示一个海量项目的目录结构。不幸的是,没有其他方法可以做到这一点。上面显示的@Ming dictRes 是我希望它输出的内容
  • 改述一下,您的预期输出是“D1 中的所有嵌套路径,其原始值在 D2 中不存在,无论值如何”,还是“D1 中的所有嵌套路径都不存在在 D2 中呈现相同的值?
  • 不幸的是,到目前为止,您的问题对于一般情况下的行为非常模棱两可,因此以上内容有点猜测。

标签: python dictionary nested except


【解决方案1】:

听起来你需要一个递归选项。

def dict_parser(target, pruning):
    d = {}
    for k,v in target.items():
        if (not v) and (k in pruning):
            continue
        if isinstance(v, dict):
            d[k] = dict_parser(v, pruning.get(k, {}))
        else:
            d[k] = v
    return d

演示:

dictOne = {"key1": {
               "key2": {},
               "key3": {
                    "key4" : {"some stuff"}
               }
           }}

dictTwo = {"key1": {
               "key2": {}
           }}

dict_parser(dictOne, dictTwo)
# gives:
# # {'key1': {
# #     'key3': {
# #         'key4': {'some stuff'}}}}

【讨论】:

  • 太棒了,我想我可以调整它以满足我的需要。非常感谢!
猜你喜欢
  • 2015-02-24
  • 1970-01-01
  • 2017-10-14
  • 2021-07-17
  • 2020-05-12
  • 1970-01-01
  • 2017-12-25
  • 2016-07-04
  • 1970-01-01
相关资源
最近更新 更多