python - 如何正确更新 Python 嵌套字典中列表类型的值?
问题描述
情况是我想构建一个嵌套字典,其结构如下
{'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}
推荐阅读
- php - Laravel 在任何编辑后都会给出 ERR_CONNECTION_RESET
- sql - 在具有多个 id 的同一张表上左连接两次
- microsoft-graph-api - Microsoft Graph API Batch limit
- jpa - JPA/eclipselink errors when migrating from java 8 to java 11
- c# - 解决泛型类型约束中的编译器错误
- sql - Unlock a table of a ingres database
- java - sonar null pointer exception in java piece of code
- php - Curl returns empty response on the first api call, but return response on the second call
- scala - How to resolve a 'Type mismatch' error in scala?
- c++ - I cannot solve the else part in my if-else ladder?