我有一本字典,我想简单地复制一下,然后更改一些内容.我注意到,如果我首先写入更改后的属性,它将被覆盖.如果我把它写在最后,它就会一直写下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.

除非我遗漏了什么,否则这似乎保证了较晚的值将覆盖较早的值.

Python相关问答推荐

使用mySQL的SQlalchemy过滤重叠时间段

点到面的Y距离

处理带有间隙(空)的duckDB上的重复副本并有效填充它们

聚合具有重复元素的Python字典列表,并添加具有重复元素数量的新键

切片包括面具的第一个实例在内的眼镜的最佳方法是什么?

加速Python循环

Pandas DataFrame中行之间的差异

使用密钥字典重新配置嵌套字典密钥名

Odoo 16使用NTFS使字段只读

多指标不同顺序串联大Pandas 模型

调用decorator返回原始函数的输出

与命令行相比,相同的Python代码在Companyter Notebook中运行速度慢20倍

在Admin中显示从ManyToMany通过模型的筛选结果

Python如何导入类的实例

Scipy差分进化:如何传递矩阵作为参数进行优化?

递归链表反转与打印语句挂起

我怎样才能让深度测试在OpenGL中使用Python和PyGame呢?

在不中断格式的情况下在文件的特定部分插入XML标签

pyspark where子句可以在不存在的列上工作

为什么在安装了64位Python的64位Windows 10上以32位运行?