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

时间:2010-07-09 07:59:56

标签: python dictionary

例如,假设我必须使用词典:

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

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

检查这两个词典是否包含相同的键集是最聪明的方法是什么?在上面的示例中,它应该返回False,因为d_2包含'alan'键,d_1不包含{{1}}键。请注意,我不想检查每个键的相关值是否相同,只是一组键是相同的。

6 个答案:

答案 0 :(得分:27)

在Python2中,

set(d_1) == set(d_2)

在Python3中,你可以做到这一点,这可能比创建集合

更有效
d1.keys() == d2.keys()

虽然Python2方式也可以使用

答案 1 :(得分:24)

您可以使用dict.keys()获取字典的键。

您可以将其转换为set(dict.keys())

的集合

您可以使用==

比较集合

总结一下:

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

会给你你想要的东西。

答案 2 :(得分:3)

  • 在Python 3中,dict.keys()返回一个“view object”,可以像集合一样使用。这比构建一个单独的集更有效。

    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)
    

答案 3 :(得分:0)

>>> not set(d_1).symmetric_difference(d_2)
False
>>> not set(d_1).symmetric_difference(dict.fromkeys(d_1))
True

答案 4 :(得分:0)

一种方法是检查symmetric difference(包含s或t中元素的新集合,但不是两者都有):

set(d_1.keys()).symmetric_difference(set(d_2.keys()))

但只是比较一下这个集合的简短方法:

set(d_1) == set(d_2)

答案 5 :(得分:-2)

快速选项(不确定它是否是最佳选择)

len(set(d_1.keys()).difference(d_2.keys())) == 0