在stackoverflow中看到的这个问题。现有两个字典,使用update方法
x = {'a':1, 'b': 2} y = {'b':10, 'c': 11} z = x.update(y) print(z) print(x)
1
2
3
4
5
6
|
x
=
{
'a'
:
1
,
'b'
:
2
}
y
=
{
'b'
:
10
,
'c'
:
11
}
z
=
x
.
update
(
y
)
print
(
z
)
print
(
x
)
|
结果z却是空,x却被改变了。
None {'a': 1, 'b': 10, 'c': 11}
1
2
|
None
{
'a'
:
1
,
'b'
:
10
,
'c'
:
11
}
|
字典这种数据结构我经常用到,咱们今天就尝试几种字典合并的方法(字典结果仅限一层)。
方法1
入门Python的人谁都能想到的方法(我也是想到的这个办法)
result = dict(x) #检测发现result和x不指向同一个地址 print(id(result)==id(x)) for k,v in y.items(): if k in result: result[k] = result[k]+v else: result[k] = v print(result) False {'a': 1, 'b': 12, 'c': 11}
1
2
3
4
5
6
7
8
9
10
11
12
13
|
result
=
dict
(
x
)
#检测发现result和x不指向同一个地址
print
(
id
(
result
)
==
id
(
x
)
)
for
k
,
v
in
y
.
items
(
)
:
if
k
in
result
:
result
[
k
]
=
result
[
k
]
+
v
else
:
result
[
k
]
=
v
print
(
result
)
False
{
'a'
:
1
,
'b'
:
12
,
'c'
:
11
}
|
方法2
这个方法简洁清奇,印象深刻。
#新建一个字典,使用**传递key-value对 x = {'a':1, 'b': 2} y = {'b':10, 'c': 11} z = {**x, **y} print(z)
1
2
3
4
5
6
7
8
|
#新建一个字典,使用**传递key-value对
x
=
{
'a'
:
1
,
'b'
:
2
}
y
=
{
'b'
:
10
,
'c'
:
11
}
z
=
{
*
*
x
,
*
*
y
}
print
(
z
)
|
{'a': 1, 'b': 10, 'c': 11}