情況是我想構建一個具有如下結構的嵌套字典
{'a': {'1': [], '2': [], '3': [], '4': []},
'b': {'1': [], '2': [], '3': [], '4': []},
'c': {'1': [], '2': [], '3': [], '4': []}}
啟動部分是
keys = ['a','b','c']
subkeys = ['1','2','3','4']
target_dict = dict.fromkeys(keys, {key: [] for key in subkeys})
然后,我想更新子鍵的值,例如target_dict['a']['1'] = 1,我只想將條目“a-1”設定為 1,并將其他值留空。但是,“a-1”、“b-1”和“c-1”都同時更新。導致結果為
{'a': {'1': 1, '2': [], '3': [], '4': []},
'b': {'1': 1, '2': [], '3': [], '4': []},
'c': {'1': 1, '2': [], '3': [], '4': []}}
這種情況的原因是什么,我應該如何解決?謝謝。
uj5u.com熱心網友回復:
問題是,target_dict['a'] target_dict['b']并且target_dict['c']似乎保持相同的參考。嘗試將您的代碼更改為
target_dict = {k: {key: [] for key in subkeys} for k in keys}
uj5u.com熱心網友回復:
您為每個鍵提供了相同的物件(字典)作為值。無論您使用哪個鍵來訪問 dict 并對其進行修改,都只有一個 dict,因此它會反映所有其他鍵。
為每個鍵創建一個 dict 解決了這個問題:
>>> keys = ['a','b','c']
>>> subkeys = ['1','2','3','4']
>>> target_dict = {key: {subkey: [] for subkey in subkeys} for key in keys}
>>> target_dict
{'a': {'1': [], '2': [], '3': [], '4': []}, 'b': {'1': [], '2': [], '3': [], '4': []}, 'c': {'1': [], '2': [], '3': [], '4': []}}
>>> target_dict['a']['1'].append(1)
>>> target_dict
{'a': {'1': [1], '2': [], '3': [], '4': []}, 'b': {'1': [], '2': [], '3': [], '4': []}, 'c': {'1': [], '2': [], '3': [], '4': []}}
uj5u.com熱心網友回復:
keys = ['a','b','c']
subkeys = ['1','2','3','4']
temp = lambda x: dict(zip(subkeys, [[1] if x == "a" and i == 0 else [] for i in range(len(subkeys))]))
target_dict = {k:v for k, v in zip(keys, [temp(key) for key in keys])}
print(target_dict)
# {'a': {'1': [1], '2': [], '3': [], '4': []}, 'b': {'1': [], '2': [], '3': [], '4': []}, 'c': {'1': [], '2': [], '3': [], '4': []}}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/349350.html
