假设有两个命令,而其中一些关键则受到质疑。然后,我想结合这两个字典,并使用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"通常也禁止尝试将其用作关键字参数,但是使用**符号表示法是可行的。关于允许这样做是否是一个好主意,意见不一。)