仅比较共享密钥上的词典

时间:2016-05-21 20:59:00

标签: python python-3.x dictionary

我有两个带有一些共享密钥的字典,还有一些不同的字典。 (每个字典都有一些键不存在于另一个字典中)。比较两个词典是否相同的好方法,就好像只有共享键一样?

换句话说,我想要一种最简单的方法来计算以下内容:

commonkeys = set(dict1).intersection(dict2)
simple1 = dict((k, v) for k,v in dict1.items() if k in commonkeys)
simple2 = dict((k, v) for k,v in dict2.items() if k in commonkeys)
return simple1 == simple2

我设法将其简化为:

commonkeys = set(dict1).intersection(dict2)
return all(dict1[key] == dict2[key] for key in commonkeys)

但我希望有一种方法不需要预先计算公共密钥。 (实际上我有两个字典列表,我将成对比较。每个列表中的所有字典都有相同的键集,所以如果需要像commonkeys这样的计算,那么它只需要做一次。)

2 个答案:

答案 0 :(得分:3)

以下情况如何?

 func checkIfFieldsEmpty()-> Bool{
var v = [
        "name":""
        ]

        var textfieldStatus:Bool = true
        var fielderrorCount:Int = 0


        for (key, value) in v{

            if value == ""{
                fielderrorCount = 1
            }
        }


        if fielderrorCount > 0{
           textfieldStatus = false

        }

        return textfieldStatus

    }

甚至更短(尽管可能还需要进行一些比较):

return all(dict2[key] == val for key, val in dict1.iteritems() if key in dict2) 

答案 1 :(得分:0)

试试这个

dict((k, dict1[k]) for k in dict1.keys() + dict2.keys() if dict1.get(k) == dict2.get(k))

O(m + n)比较。

如果您想要一个真/假结果,请简单检查上述结果。如果不是,则不返回真实