當我創建一個嵌套字典結構時,我遇到了一個問題,當我嘗試將一個專案附加到嵌套字典中的串列時,它會將該專案附加到具有相應最終鍵的嵌套字典所有級別的所有串列中。
d = {"p": [], "d": []}
d = {value: dict(d) for value in [1,2,3]}
d = {value: dict(d) for value in ["h", "i"]}
d
Out[14]:
{'h': {1: {'p': [], 'd': []}, 2: {'p': [], 'd': []}, 3: {'p': [], 'd': []}},
'i': {1: {'p': [], 'd': []}, 2: {'p': [], 'd': []}, 3: {'p': [], 'd': []}}}
當我開始使用 append() 填充我的“底層”詞典串列時,會發生這種情況:
d["h"][1]["p"].append("Please Help")
d
Out[16]:
{'h': {1: {'p': ['Please Help'], 'd': []},
2: {'p': ['Please Help'], 'd': []},
3: {'p': ['Please Help'], 'd': []}},
'i': {1: {'p': ['Please Help'], 'd': []},
2: {'p': ['Please Help'], 'd': []},
3: {'p': ['Please Help'], 'd': []}}}
如上所示,字串被附加到d中具有最終鍵“p”的每個串列中。使用串列的串聯會產生類似但不同的結果:
d = {"p": [], "d": []}
d = {value: dict(d) for value in [1,2,3]}
d = {value: dict(d) for value in ["h", "i"]}
d["h"][1]["p"] = d["h"][1]["p"] ["Please Help"]
d
Out[23]:
{'h': {1: {'p': ['Please Help'], 'd': []},
2: {'p': [], 'd': []},
3: {'p': [], 'd': []}},
'i': {1: {'p': ['Please Help'], 'd': []},
2: {'p': [], 'd': []},
3: {'p': [], 'd': []}}}
在這里,字串被添加到共享相同的第 2 級和第 3 級鍵(分別為 1 和 'p')的串列中。我不明白發生了什么,任何幫助將不勝感激。這是在 Python 3.7 上。
uj5u.com熱心網友回復:
就像@Mark說你需要使用復制......
from copy import deepcopy as dc
d = {"p": [], "d": []}
d = {value: dc(d) for value in [1,2,3]}
d = {value: dc(d) for value in ["h", "i"]}
d["h"][1]["p"].append("Please Help")
print(d)
#{'h': {1: {'p': ['Please Help'], 'd': []}, 2: {'p': [], 'd': []}, 3: {'p': [], 'd': []}}, 'i': {1: {'p': [], 'd': []}, 2: {'p': [], 'd': []}, 3: {'p': [], 'd': []}}}
uj5u.com熱心網友回復:
當你這樣做時d = {value: dict(d) for value in [1,2,3]},你不會在里面創建三個不同的字典d。你把同一個字典重復了三遍。同樣對于d = {value: dict(d) for value in ["h", "i"]}。因此,當您這樣做時d["h"][1]["p"].append("Please Help"),您將附加'Please Help'到一本字典中。由于另一個“底層”字典是同一個字典,你會一遍又一遍地看到相同的字串。
作為一個類比,您可以將每個變數視為一個帶有數字的框。當您這樣做時d = {value: dict(d) for value in [1,2,3]},您將在字典中輸入相同的框號三次,而不是創建三個不同的框。當您告訴 Python 更改“第一個”框的值時,它會轉到具有該框號的框,并更改該框中的內容。由于所有“其他”框都指向同一個框,因此您在查看那些“其他”框時看到的內容也發生了變化。
您可以通過執行來解決此問題{value: dict(d).copy() for value in [1,2,3]}。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/431537.html
下一篇:如何從字典中匯出Excel檔案?
