簡體   English   中英

如何正確更新 Python 嵌套字典中列表類型的值?

[英]How to correctly update the values of list types in a Python nested dictionary?

情況是我想構建一個嵌套字典,其結構如下

{'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': []}}

這種情況的原因是什么,我應該如何解決? 謝謝。

問題是target_dict['a'] target_dict['b']target_dict['c']似乎保持相同的引用。 嘗試將您的代碼更改為

target_dict = {k: {key: [] for key in subkeys} for k in keys}

您為每個鍵提供了相同的對象(字典)作為值。 無論您使用哪個鍵來訪問 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': []}}
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': []}}

暫無
暫無

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

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