簡體   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