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

c00*_*ter 24 python dictionary

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

d_1 = {'peter': 1, 'adam': 2, 'david': 3}
Run Code Online (Sandbox Code Playgroud)

d_2 = {'peter': 14, 'adam': 44, 'david': 33, 'alan': 21}
Run Code Online (Sandbox Code Playgroud)

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

Joh*_*ooy 30

在Python2中,

set(d_1) == set(d_2)
Run Code Online (Sandbox Code Playgroud)

在Python3中,您可以执行此操作,这可能比创建集更有效

d1.keys() == d2.keys()
Run Code Online (Sandbox Code Playgroud)

虽然Python2方式也可以


xor*_*yst 27

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

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

您可以将集与==进行比较

总结一下:

set(d_1.keys()) == set(d_2.keys())
Run Code Online (Sandbox Code Playgroud)

会给你你想要的.

  • 那里你不需要"钥匙". (3认同)
  • 确实,您不需要键,但是如果您不经常使用集合,我会说 set(dictionary) 的行为是不明显的。有谁知道使用键是否会影响性能? (2认同)
  • @xorsyst:在Python 2中`iter(a_dict)`返回一个迭代器,`a_dict.keys()`返回一个列表; 因此,`set(d_1.keys())`会导致创建和销毁字典键的临时列表.在Python 3中,它们是等价的. (2认同)
  • @Joschua:如果你熟悉list(some_dict),那么我同意set(some_dict)应该很明显.但对我来说,这些都不会像他们那样有效.我的第一个期望是list(some_dict)将是(key,value)元组的列表.我同意只返回密钥是一种有用的行为,但我不会说这是"显而易见的". (2认同)

aug*_*rar 8