我有一本字典,我想简单地复制一下,然后更改一些内容.我注意到,如果我首先写入更改后的属性,它将被覆盖.如果我把它写在最后,它就会一直写下go :
>>> d = {1: 1, 2: 2}
{1: 1, 2: 2}
>>> d1 = {1: 11, **d}
{1: 1, 2: 2}
>>> d2 = {**d, 1: 11}
{1: 11, 2: 2}
然而,我知道字典里的顺序不可靠.我可以假设在{**d, 1: 11}
中,d[1]
肯定会被更新后的值覆盖吗?
我有一本字典,我想简单地复制一下,然后更改一些内容.我注意到,如果我首先写入更改后的属性,它将被覆盖.如果我把它写在最后,它就会一直写下go :
>>> d = {1: 1, 2: 2}
{1: 1, 2: 2}
>>> d1 = {1: 11, **d}
{1: 1, 2: 2}
>>> d2 = {**d, 1: 11}
{1: 11, 2: 2}
然而,我知道字典里的顺序不可靠.我可以假设在{**d, 1: 11}
中,d[1]
肯定会被更新后的值覆盖吗?
引用Python language spec中第dictionary displays节(我的斜体):
如果给定逗号分隔的键/数据对序列,则从左到右对它们进行求值,以定义词典的条目:每个键对象用作词典中的键,以存储相应的数据.This means that you can specify the same key multiple times in the key/datum list, and the final dictionary’s value for that key will be the last one given.个
双星号**表示词典解包.其操作数必须是映射.每个映射项都会添加到新词典中.Later values replace values already set by earlier key/datum pairs and earlier dictionary unpackings.个
除非我遗漏了什么,否则这似乎保证了较晚的值将覆盖较早的值.