繁体   English   中英

Python:字典初始化的顺序

[英]Python: order of dictionary initialization

我有一本字典d ,我想浅浅地复制它,然后更改它的一些内容。 我注意到如果我先写改变的属性,它会被覆盖。 如果我最后写它,它仍然存在:

>>> 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 语言规范中的字典显示部分(我的斜体):

如果给出逗号分隔的键/数据对序列,则从左到右评估它们以定义字典的条目:每个键 object 用作字典中的键以存储相应的数据。 这意味着您可以在键/数据列表中多次指定同一个键,并且该键的最终字典值将是最后一个给定的值。

双星号 ** 表示字典解包。 它的操作数必须是一个映射。 每个映射项都添加到新字典中。 以后的值替换已由较早的键/数据对和较早的字典解包设置的值。

除非我遗漏了什么,否则这似乎可以保证后面的值会覆盖前面的值。

从 Python 3.6 开始,标准 dict 类型默认保持插入顺序。

在这种情况下,后面的事件会覆盖之前的事件。

因此,如果您说d1 = {1: 11, **d} ,则1的值将更新为新值,如果您说d2 = {**d, 1: 11} ,则1的值在d将更新为1: 11

所以是的! 您可以确定d[1]被更新的值覆盖。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM