我有一個字典串列,例如:
dict_list_all = [{'name': 'dict_00',
'steps': {'step_00': False,
'step_01': False,
'step_02': False},
},
{'name': 'dict_01',
'steps': {'step_00': False,
'step_01': False,
'step_02': False},
},
{'name': 'dict_01',
'steps': {'step_00': False,
'step_01': False,
'step_02': False},
},
]
我想根據用戶輸入從此串列中選擇一個詞典。然后,一旦選擇了這個字典,在不影響原始串列的情況下,修改所選字典中 'steps' 鍵下的布林值。
我正在做這樣的事情
user_input = input('Which dict do you need?')
selected_dict = [d for d in dict_list_all if d['name'] == user_input][0]
在這一點上,我以為我正在從串列中制作我想要的字典的單獨副本(selected_dict)。但是,當我修改 selected_dict 中的值時,dict_list_all 中字典中的相應值也會相應更改。我怎樣才能避免這種情況?
我嘗試使用:
selected_dict = [d for d in dict_list_all if d['name'] == user_input][0].copy()
selected_dict = [d for d in dict_list_all.copy() if d['name'] == user_input][0].copy()
但問題仍然存在,我該如何解決這個問題?
uj5u.com熱心網友回復:
您可以使用copy.deepcopy(并next使用生成器):
from copy import deepcopy
selected_dict = next(deepcopy(d) for d in dict_list_all if d['name'] == user_input)
next具有節省記憶體(如不構建list)和短路的優點。
你從你的 simple 中得到的淺拷貝dict.copy將是一個新的頂級dict物件,但是任何值(我們只關心可變的),比如嵌套的 dicts 將保持對原始值的參考。
uj5u.com熱心網友回復:
聽起來你想要一個深拷貝。就像是 :
import copy
selected_dict = [copy.deepcopy(d) for d in dict_list_all.copy() if d['name'] == user_input][0]
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/322840.html
下一篇:從檔案中讀取特定資訊到字典
