d3 = {** d1,** d2}`和`d4 = dict(** d1,** d2)之间的差?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了d3 = {** d1,** d2}`和`d4 = dict(** d1,** d2)之间的差?相关的知识,希望对你有一定的参考价值。

说,有两个字典,其中一些关键句被怀疑。然后,我想结合这两个字典,并使用d2的键替换d1。

d1 = 
    "2222": 1:3,
    "3333":1:5


d2 = 
    "2222": 1:5,
    "4444":"a"



# expected output is
# '2222': 1: 5, '3333': 1: 5, '4444': 'a'

我尝试过



d3 = **d1, **d2  # works

d4 = dict(**d1, **d2)  # failed

TypeError: type object got multiple values for keyword argument '2222'


我很困惑为什么d3 = **d1, **d2有效但是d4 = dict(**d1, **d2)失败了,以及**在这两个表达式中的含义是什么?

答案

dict()是一种获取可迭代对象并从中生成新字典的方法。

Init signature: dict(self, /, *args, **kwargs)
Docstring:
dict() -> new empty dictionary
dict(mapping) -> new dictionary initialized from a mapping object's
    (key, value) pairs
dict(iterable) -> new dictionary initialized as if via:
    d = 
    for k, v in iterable:
        d[k] = v
dict(**kwargs) -> new dictionary initialized with the name=value pairs
    in the keyword argument list.  For example:  dict(one=1, two=2)
Type:           type
Subclasses:     OrderedDict, defaultdict, Counter, _EnumDict, Bunch, Config, Struct, ColorSchemeTable, FastDictCache, _CharSizesCache, ...

[d3 = **d1, **d2内置在python中。

因此有所不同。

另一答案

他们做的事情略有不同。

第一个类似于写作

d3 = "2222": 1:3, "3333":1:5, "2222": 1:5, "4444":"a"

您在定义字典时重复按键的位置。这是允许的(但可能不是一个好主意)。

第二个类似于写作

d4 = dict("2222"=1:3, "3333"=1:5, "2222"=1:5, "4444"="a")

[您在这里调用dict传递关键字,并且该关键字重复两次。在语言级别上是禁止的。

以上是关于d3 = {** d1,** d2}`和`d4 = dict(** d1,** d2)之间的差?的主要内容,如果未能解决你的问题,请参考以下文章

mysql 时间字段介绍

用两个 csv 在 redshift 中填充相同的条目

ios的时间选择器怎么只选择年月

python 根据字典的键值进行排序

软件设计师2019模拟小测

如何在火花中使用 foreach 访问数组?