首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >intersection_update是给dicts的?

intersection_update是给dicts的?
EN

Stack Overflow用户
提问于 2012-09-27 15:03:58
回答 2查看 466关注 0票数 6

我想要一个实现intersection_update方法的字典类,在精神上类似于dict.update,但是只将更新限制在已经存在于调用实例中的键上(有关一些示例实现,请参阅下面)。

但是,本着避免车轮再发明的精神,在我开始执行之前(以及编写测试等等)一个具有这个附加功能的映射类,这样的东西是否已经存在于一个或多或少的标准模块中?

为了明确起见,我想到的intersection_update方法将执行如下操作:

代码语言:javascript
复制
def intersection_update(self, other):
    for k in self.viewkeys() & other.viewkeys():
        self[k] = other[k]

...although一个实际的实现可能尝试一些可能的优化,例如:

代码语言:javascript
复制
def intersection_update(self, other):
    x, y = (self, other) if len(self) < len(other) else (other, self)
    for k in x.iterkeys():
        if k in y:
            self[k] = other[k]

编辑:在这篇文章的原始版本中,我曾写过“或者,是否有一个标准的Python成语可以避免使用intersection_update方法实现类?”,但我几乎立即删除了它,因为经过进一步的思考,我意识到这是对弱答案的邀请,因为我对Python语言的“核心”非常了解,因此非常肯定不存在这样的白痴,至少没有一个能与专用方法的优点(通用性、可读性、容易打字性)相匹配。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-27 15:21:22

试试这个:

代码语言:javascript
复制
def dict_intersection(d1, d2):
    return dict((key, d2[key] or d1[key]) for key in frozenset(d1) & frozenset(d2))

或者,对于python版本>= 2.7:

代码语言:javascript
复制
def dict_intersection(d1, d2):
    return {key: d2[key] or d1[key] for key in d1.viewkeys() & d2.viewkeys()}
票数 1
EN

Stack Overflow用户

发布于 2012-09-27 15:14:45

这里有一个伪代码,您可以在现有的update函数中使用它,但是如果您想要扩展字典,那么您的代码也是有效的--但是这会增加在任何地方使用您的dict类的额外麻烦。

代码语言:javascript
复制
In [1]: x = dict(name='abc', age=23)

In [2]: y = dict(name='xyz', notes='Note 123', section=None)

In [3]: #x.update(dict((k,y[k]) for k in y if k in x))

In [3]: x.update((k,v) for k,v in y.iteritems() if k in x)

In [4]: x
Out[4]: {'age': 23, 'name': 'xyz'}

编辑:按照kjo的注释使用iteritems方法更新代码

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12624432

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档