我有两个带有一些共享密钥的字典,还有一些不同的字典。 (每个字典都有一些键不存在于另一个字典中)。比较两个词典是否相同的好方法,就好像只有共享键一样?
换句话说,我想要一种最简单的方法来计算以下内容:
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
这样的计算,那么它只需要做一次。)
答案 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)比较。
如果您想要一个真/假结果,请简单检查上述结果。如果不是,则不返回真实