【问题标题】:Check existence of nested dictionary检查嵌套字典的存在
【发布时间】:2019-11-05 14:21:34
【问题描述】:

我知道如何在字典中检查是否存在键或值。
如果你有一个 NESTED 字典,在我将另一个字典添加到外部字典之前,有没有办法检查它是否已经存在? 即,如果在我将另一个字典 D 添加到外部 A 之前,外部字典 A 包含嵌套字典 B、C,我如何检查名称 D 的字典是否已经存在于 A 中? TIA

【问题讨论】:

  • 虽然这个问题有点奇怪,但您可能需要查看默认字典。如果您“在跳跃之前先查看”并且仅在 dict 存在时调用 update,则 defaultdict 可能会修复您的旅行车。
  • dict 没有名字。您是在询问是否存在相同的对象(即id 匹配)或是否存在具有相同值的对象?
  • 谢谢,Jonathan Scholbach 在下面说得更好,我正在尝试“检查父级是否没有同名的子字典”

标签: python dictionary nested


【解决方案1】:

你的问题不是很清楚。我尝试涵盖我能想到的所有可能场景:

检查候选不包含在父级中

您可以使用父字典的values() 方法检查给定字典是否在父字典的值中。请注意,这不会检查键的顺序,因为字典的键没有特定的(固定或“冻结”)顺序,并且无论键的顺序如何,两个字典都被认为是相等的:

parent = {
   "b": {
        "hey": "ho",
        "let's": "go"
   },
   "c": {"another": "value"}
}

candidate = {
    "let's": "go",
    "hey": "ho"
}

然后:

>>> candidate in parent.values()
True

所以,如果我理解你的问题,你会得到你想要的:

if candidate not in parent.values():
    parent["candidate"] = candidate

检查父级是否没有具有相同“名称”的子字典

但是,如果您实际上不想检查给定字典是否在父字典中,而只想检查父字典中是否存在与 name 相同的嵌套字典候选字典,只需查找父字典的items():

if not "candidate" in parent:  # this is equal to 
# if not "candidate" in parent.items():
    parent["candidate"] = candidate

检查父级是否没有具有相同“名称”或内容的子字典

最后,如果你想检查这两个条件,即你想检查父字典中是否存在与给定候选字典内容相同或名称相同的嵌套字典,只需结合两个条件:

if not "candidate" in parent and not candidate in parent.values():
    parent["candidate"] = candidate

【讨论】:

  • 谢谢,我试图清楚地提出问题,但正如你所描述的,我正在尝试“检查父级是否没有同名的子字典”。
猜你喜欢
  • 1970-01-01
  • 2013-09-05
  • 1970-01-01
  • 1970-01-01
  • 2015-06-02
  • 2021-02-28
  • 2016-11-14
  • 2021-12-29
  • 1970-01-01
相关资源
最近更新 更多