检查两个字典是否具有相同键的Pythonic方法?

50 投票
6 回答
49526 浏览
提问于 2025-04-16 01:02

比如说,我有两个字典:

d_1 = {'peter': 1, 'adam': 2, 'david': 3}

d_2 = {'peter': 14, 'adam': 44, 'david': 33, 'alan': 21}

那么,有什么聪明的方法可以检查这两个字典是否包含相同的键呢?在上面的例子中,结果应该是 False,因为 d_2 包含了 'alan' 这个键,而 d_1 没有。

我并不关心它们对应的值是否相同,只想确认一下键是否一样。

6 个回答

13
  • 在Python 3中,dict.keys()会返回一个“视图对象”,这个对象可以像集合一样使用。这样做比单独创建一个集合要高效得多。

    d_1.keys() == d_2.keys()
    
  • 在Python 2.7中,dict.viewkeys()也有同样的功能。

    d_1.viewkeys() == d_2.viewkeys()
    
  • 在Python 2.6及更早的版本中,你需要自己创建一个字典中所有键的集合。

    set(d_1) == set(d_2)
    

    或者你可以自己遍历这些键,这样可以更节省内存。

    len(d_1) == len(d_2) and all(k in d_2 for k in d_1)
    
55

在Python2中,

set(d_1) == set(d_2)

在Python3中,你可以这样做,这可能比创建集合稍微高效一点

d1.keys() == d2.keys()

不过Python2的方法也可以用

49

你可以通过 dict.keys() 来获取字典里的所有键。

然后你可以用 set(dict.keys()) 把这些键转换成一个集合。

你可以用 == 来比较两个集合。

总的来说:

set(d_1.keys()) == set(d_2.keys())

这样就能得到你想要的结果。

撰写回答