查找2个字典之间“key”差异的简洁方法是什么?
问题的出现原因是找到两个字典之间的“关键”差异,并且希望找到一种简洁的方法来实现这个目标。
解决方法是使用列表推导式来比较字典的键。首先,可以使用[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的回答中的方法。
可以使用列表推导式来找到两个字典之间的“关键”差异,并且可以根据具体情况选择使用字典的键或值进行比较。
从上面的内容可以看出,这篇文章讨论了在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() - d2
或d - d2.keys()
来找到两个字典之间的“key”差异,但这种写法可能不够可读。
还有人问时间复杂度的问题,d.keys()-d2.keys()
是否像预期的那样在O(|len(d2)|)
时间内工作。文章中没有明确回答这个问题。
最后,文章还提到在Python 2.7中可以使用d.viewkeys() - d2.viewkeys()
来找到两个字典之间的“key”差异,因为Python 2.7有Python 3中.keys()
的后端。
在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的代码。