当前位置:  开发笔记 > 编程语言 > 正文

Python"扩展"为字典

如何解决《Python"扩展"为字典》经验,为你挑选了5个好方法。

哪个是用另一个字典扩展字典的最佳方法?例如:

>>> a = { "a" : 1, "b" : 2 }
>>> b = { "c" : 3, "d" : 4 }
>>> a
{'a': 1, 'b': 2}
>>> b
{'c': 3, 'd': 4}

我正在寻找任何操作来获得这个避免for循环:

{ "a" : 1, "b" : 2, "c" : 3, "d" : 4 }

我希望做的事情如下:

a.extend(b)  # This does not work

Nick Fortesc.. 638

a.update(b)

最新的Python标准库文档



1> Nick Fortesc..:
a.update(b)

最新的Python标准库文档


请记住,update()直接修改dict并返回None.
@Nearoo - 只需更新相反的方式; 而不是x.update(y)[将用y覆盖x值],使用y.update(x)[用x覆盖y值]并使用y作为您选择的dict进行进一步操作
在阅读完文档后,人们将理解为什么会有'更新'而不是'扩展'.
但是,如果您只想使用已经未定义的值扩展dict(即不覆盖现有值),该怎么办?例如,更新一个字典`{"a":2,"b":3}`用dict` {"b":4,"c":5}`来判断`{"a":2,"b ":3," C":5}`?当然可以通过移动一些东西来使用`update()`,但如果只能在一行中完成它会更好......

2> Tom Leys..:

这个封闭的问题是一个美丽的宝石:

"oneliner方式",既不改变输入词,也是

basket = dict(basket_one, **basket_two)

了解什么是**basket_two(在**)指这里.

如果发生冲突,项目basket_two将覆盖来自的项目basket_one.作为单行人员,这是非常可读和透明的,并且我没有任何强制反对使用它的任何时候一个混合的两个其他人派上用场(任何难以理解它的读者实际上将得到很好的服务这促使他或她学习dict**形式的方式;-).因此,例如,使用如下:

x = mungesomedict(dict(adict, **anotherdict))

在我的代码中经常发生.

最初由Alex Martelli提交

注意:在Python 3中,只有当basket_two中的每个键都是a时才会有效string.


[`dict`](http://docs.python.org/2/library/stdtypes.html#dict)的文档很容易找到[`**`](http://www.saltycrane.com/ blog/2008/01/how-to-use-args-and-kwargs-in-python /)有点棘手(关键字是*kwargs*).这是一个很好的解释:http://www.saltycrane.com/blog/2008/01/how-to-use-args-and-kwargs-in-python/
可以用一个命令来生成第二个变量,而正如名字所说的`basket_one.update(<dict>)`可以更新现有字典(或克隆的字典)。

3> Vlad Bezden..:

您是否尝试过使用字典映射的字典理解:

c = {**a, **b}
# c = { "a" : 1, "b" : 2, "c" : 3, "d" : 4 }


仅供参考:这不是Python 2.7中的有效语法

4> vartec..:
a.update(b)

b键和值添加到a,如果已经存在键的值,则覆盖.



5> eblume..:

正如其他人所提到的那样,a.update(b)对于一些决定而言a,b你将在你的问题中找到你所要求的结果.但是,我想指出,我已经多次看到extend映射/设置对象的方法希望在语法中a.extend(b),a值的值不应该被覆盖b.a.update(b)覆盖a的价值观,所以不是一个好的选择extend.

请注意,有些语言调用这个方法defaults还是inject,因为它可以被看作是注射B的值(这可能是一组默认值),在以字典的方式,而不会覆盖可能已经存在的值.

当然,你可以简单地注意到它a.extend(b)几乎相同b.update(a); a=b.要删除分配,您可以这样做:

def extend(a,b):
    """Create a new dictionary with a's properties extended by b,
    without overwriting.

    >>> extend({'a':1,'b':2},{'b':3,'c':4})
    {'a': 1, 'c': 4, 'b': 2}
    """
    return dict(b,**a)

感谢Tom Leys使用无副作用dict构造函数的聪明想法extend.

推荐阅读
oDavid_仔o_880
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有