例如,假设我必须使用词典:
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}}键。请注意,我不想检查每个键的相关值是否相同,只是一组键是相同的。
答案 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