【问题标题】:python how to find if a dictionary contains data from other dictionarypython如何查找字典是否包含来自其他字典的数据
【发布时间】:2016-11-24 07:22:45
【问题描述】:

在 Python 中,我如何查找一个字典是否包含另一个字典中的数据。

我的数据被分配给这样的变量

childDict = {
  "assignee" : {
     "first":"myFirstName",
     "last":"myLastName"
  },
  "status" : "alive"
}

我有另一个名为 masterDict 的字典,其层次结构相似,但其中包含更多数据。

masterDict = {
  "description": "sample description",
  "assignee" : {
     "first" : "myFirstName",
     "last" : "myLastName"
  },
  "status" : "dead",
  "identity": 1234  
}  

现在我需要通读 childDict 并找出 masterDict 中是否包含这些值。

数据是嵌套的,它可以有更多的深度。 在上面的例子中,由于状态不匹配,它应该返回 false,否则它应该返回 true。我如何比较它们。我是 python 新手。感谢您的帮助。

【问题讨论】:

    标签: python dictionary compare contains


    【解决方案1】:

    请注意,您的字典中有一些错误(缺少逗号)。

    childDict1 = {
        "assignee": {
            "first":"myFirstName",
            "last":"myLastName"
        },
        "status" : "alive"
    }
    
    childDict2 = {
        "assignee": {
            "first":"myFirstName",
            "last":"myLastName"
        },
        "status" : "dead"
    }
    
    masterDict = {
        "description": "sample description",
        "assignee": {
            "first":"myFirstName",
            "last":"myLastName"
        },
        "status": "dead",
        "identity": 1234  
    }
    
    def contains_subdict(master, child):
        if isinstance(master, dict) and isinstance(child, dict):
            for key in child.keys():
                if key in master:
                    if not contains_subdict(master[key], child[key]):
                        return False
            return True
        else:
            if child == master:
                return True
            return False
    
    print contains_subdict(masterDict, childDict1)
    print contains_subdict(masterDict, childDict2)
    

    运行代码产生输出:

    False
    True
    

    【讨论】:

    • 感谢 Fhaab。有效!不知何故,我试图捕捉密钥的路径以与主 dict 进行比较。像 masterDict["assignee"]["first"] == childDictValue。所以,我在那里被误导了。这个解决方案很好。再次感谢。
    猜你喜欢
    • 2014-05-27
    • 2015-11-12
    • 2017-02-27
    • 1970-01-01
    • 1970-01-01
    • 2020-07-10
    • 2018-01-19
    • 2021-09-26
    • 1970-01-01
    相关资源
    最近更新 更多