簡體   English   中英

Python管理多個字典

[英]Python managing multiple dictionaries

我正在使用Python(3.6,但也在Python 2.11中進行了測試-行為相同)和字典進行一些非常基本的操作。 這是代碼示例:

max_values = dict()
min_values = dict()

initial_values = {"stat": 2, "value": 5.5}

max_values["zzz"] = initial_values
min_values["zzz"] = initial_values

到目前為止,當我打印這些字典時:

for key, value in max_values.items():
    print("[%s] Key [%s] -> Value [%s]" % ("max_values", key, value))

for key, value in min_values.items():
    print("[%s] Key [%s] -> Value [%s]" % ("min_values", key, value))

我得到了預期的結果:

[max_values] Key [zzz] -> Value [{'stat': 2, 'value': 5.5}]
[min_values] Key [zzz] -> Value [{'stat': 2, 'value': 5.5}]

但是,如果我嘗試使用這些值進行修改,例如:

min_values["zzz"]["value"] = 1.0

並再次執行相同的打印,我得到:

[max_values] Key [zzz] -> Value [{'stat': 2, 'value': 1.0}]
[min_values] Key [zzz] -> Value [{'stat': 2, 'value': 1.0}]

問題是:為什么max_values詞典發生了變化? 我只修改min_values ,但對於這個新的密鑰分配min_value字典還修改max_values 難道我做錯了什么?

這是因為max_values和min_values鏈接在一起。 也就是說,它們都引用了initial_values。 因此,如果您更改一個,您也會更改另一個。 一種解決方案是使用Deepcopy。

在此處輸入圖片說明

正如你可以從圖中看到Max_valueMin_value參考Initial_value ,這意味着Max_valueMin_value鏈接到您創建initial_value字典中的地址。 一旦您更新了initial_val內部的值,它還將同時顯示在Max_valueMin_value

為避免此問題,可以使用from copy import deepcopy.

my_dict = {'1': 1, '1': 2}
new_dict= deepcopy(my_dict)

這樣,它將為您的舊字典創建一個新實例。

您只有一個dict initial_values並且您的兩個dict都引用相同的dict initial_values 您必須復制此字典才能獲得另一個字典。

嘗試:

max_values["zzz"] = initial_values
min_values["zzz"] = dict(initial_values)

要么:

max_values["zzz"] = initial_values
min_values["zzz"] = initial_values.copy()

現在這個結構:

min_values["zzz"]["value"] = 1.0

for key, value in max_values.items():
    print("[%s] Key [%s] -> Value [%s]" % ("max_values", key, value))

for key, value in min_values.items():
    print("[%s] Key [%s] -> Value [%s]" % ("min_values", key, value))

獲得預期的結果:

[max_values] Key [zzz] -> Value [{'stat': 2, 'value': 5.5}]
[min_values] Key [zzz] -> Value [{'stat': 2, 'value': 1.0}]

因為您給了兩個值相同的字典,所以只需查看代碼的前兩行即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM