Skip to main content
 首页 » 编程设计

python之字典的平等

2025年05月04日12qq号

我有一个查找字段列表:

>>> 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 )