查找2个字典之间“key”差异的简洁方法是什么?

9 浏览
0 Comments

查找2个字典之间“key”差异的简洁方法是什么?

我需要比较两个字典,找出一个字典中不在另一个字典中的键集合。

我知道Python中的set对象支持:

set3=set1-set2

但是我不能这样做:

dict3=dict1-dict2

或者:

missingKeys=dict1.keys()-dict2.keys()

(对于最后一点我有点惊讶,因为在Java中,键是一个Set对象)。一种解决方法是:

missingKeys=set(dict1.keys())-set(dict2.keys())

是否有更好或更简洁的方法来做到这一点?

0
0 Comments

问题的出现原因是找到两个字典之间的“关键”差异,并且希望找到一种简洁的方法来实现这个目标。

解决方法是使用列表推导式来比较字典的键。首先,可以使用[x for x in dict1.keys() if x not in dict2.keys()]来找到字典1中存在而字典2中不存在的键。然后,可以进一步简化为[x for x in dict1.keys() if x not in dict2],因为x in dict.keys()x in dict是相同的。最后,根据之前的指出,完全简化的方法是[x for x in dict1 if x not in dict2]

另外,还提到了在Python 2.7中使用[for ... in ... if ...]语法时需要注意。此外,还提到了可以使用集合来计算值的差异,类似于Zbyszek Mandziejewicz的回答中的方法。

可以使用列表推导式来找到两个字典之间的“关键”差异,并且可以根据具体情况选择使用字典的键或值进行比较。

0
0 Comments

从上面的内容可以看出,这篇文章讨论了在Python 2.7和Python 3.2中找到两个字典之间的“key”差异的方法。文章中提供了两种不同的解决方法,并讨论了它们的可读性和时间复杂度。

在Python 2.7中,可以使用set(d)-set(d2)来找到两个字典之间的“key”差异。这将返回一个包含差异“key”的集合。

在Python 3.2中,可以使用d.keys()-d2.keys()来找到两个字典之间的“key”差异。这将返回一个包含差异“key”的集合。

有人提出了一个问题,为什么Python 3.2中的d.keys()方法返回一个集合,而之前的版本没有这样做。有人解释说,实际上它返回的是一个dict_keys对象,而不是一个集合,但它具有许多类似集合的操作。

还某些情况下,可以使用d.keys() - d2d - d2.keys()来找到两个字典之间的“key”差异,但这种写法可能不够可读。

还有人问时间复杂度的问题,d.keys()-d2.keys()是否像预期的那样在O(|len(d2)|)时间内工作。文章中没有明确回答这个问题。

最后,文章还提到在Python 2.7中可以使用d.viewkeys() - d2.viewkeys()来找到两个字典之间的“key”差异,因为Python 2.7有Python 3中.keys()的后端。

0
0 Comments

在Python中,有时候我们需要找出两个字典之间的“关键”区别。为了以一种便携方式实现这一目标,我建议在Python 2.7中使用`dict.viewkeys`。这是Python 3.x中`dict.keys`的移植版本,并且会被2to3自动转换。

下面是一个示例:

>>> left = {1: 2, 2: 3, 3: 4}
>>> right = {2: 20, 3:30}
>>> left.viewkeys() - right.viewkeys()
set([1])

以上示例代码中,我们有两个字典`left`和`right`。通过使用`viewkeys`方法,我们可以获取到每个字典的键的视图。然后,我们使用集合操作符`-`来计算两个视图之间的差异,从而找到两个字典之间的“关键”区别。在上述示例中,结果是一个包含键`1`的集合。

这种方法的好处是它具有便携性,可以在Python 2.7中使用,并且可以通过2to3自动转换为Python 3.x的代码。

0