我有一个查找字段列表:
>>> l = ['A', 'C', 'Z', 'M']
我需要测试这个查找列表中 2 个字典的相等性:
>>> d1 = {'A': 3,'F': 4,'Z': 1}
>>> d2 = {'B': 0,'A': 3,'C': 7}
如果满足以下任何条件,则列表中任何字段“x”的相等性测试成功:
1.如果'x'不存在于任何一个字典中
2.如果'x'存在并且d1[x]==d2[x]
仅当列表中的所有字段都基于上述条件成功时,相等函数才会返回匹配项。
因此,对于上述指令 - Z 失败,C 失败,A 成功,M 成功。
但是,dict 的相等性测试应该报告失败。
实现这一目标的最短途径是什么?
请您参考如下方法:
这可能是最短也是最优雅的:
all( d1.get(x) == d2.get(x) for x in l )
请注意,如果 x 不在两个字典中,我们将 None 与 None 进行比较。
编辑:
- 关注评论,使用生成器(不是列表理解)。
- Ashwini 评论是正确的。如果其中一个词典的值为“无”,则将不起作用
EDIT2(以下评论):
在 None can appear in dictionary 中,您需要有一个不同的“No Value”。如果 -9999 不起作用,则只生成一个:
sentinel = object() #a new object, guaranteed not in dictionary
all( d1.get(x, sentinel) == d2.get(x, sentinel) for x in l )
