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

jia*_*mmy 2 python python-3.x

假设有两个命令,而其中一些关键则受到质疑。然后,我想结合这两个字典,并使用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'}

Run Code Online (Sandbox Code Playgroud)

我尝试过



d3 = {**d1, **d2}  # works

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

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


Run Code Online (Sandbox Code Playgroud)

我很困惑为什么d3 = {**d1, **d2}起作用但d4 = dict(**d1, **d2)失败了**,这两个表达式分别意味着什么?

Ami*_*ory 12

他们做的事情略有不同。

第一个类似于写作

d3 = {"2222": {1:3}, "3333":{1:5}, "2222": {1:5}, "4444":"a"}
Run Code Online (Sandbox Code Playgroud)

您在其中定义重复键的字典的位置。这是允许的(但可能不是一个好主意)。词典将使用为重复键提供的最后一个值。

第二个类似于写作

d4 = dict("2222"={1:3}, "3333"={1:5}, "2222"={1:5}, "4444"="a")
Run Code Online (Sandbox Code Playgroud)

在这里,您调用dict传递的关键字,并且关键字重复两次。在语言级别上是禁止的。("2222"通常也禁止尝试将其用作关键字参数,但是使用**符号表示法是可行的。关于允许这样做是否是一个好主意,意见不一。)