我需要将嵌套值分配给字典.为了便于理解,我简化了我的问题:
Data = {}
day1 = 'March12'
day2 = 'March14'
e1 = 'experiment1'
e2 = 'experiment2'
Data[day1][e1] = 4
Run Code Online (Sandbox Code Playgroud)
但是该Data[day1][e1] = 4命令不起作用(出于同样的原因test = {} ; test["foo"]["bar"] = 0).有没有解决方法来做到这一点?
我试着这样做:
me1 = {e1 : 4}
me2 = {e2 : 5}
Data = {day1 : me1}
Data = {day2 : me2}
Run Code Online (Sandbox Code Playgroud)
但我不能成功; 我写的所有东西都以某种方式覆盖了现有的价值观,或者不像我希望的那样.我可能错过了一些东西......
一些额外的注释:在begininng没有关于字典长度的任何信息,或它的确切外观.而不是值4,我将一个对象指定为值.我需要使用这样的结构(Data[day1][e1])因为我必须将对象分配给循环内的键.
你需要在里面存储一个新的字典Data才能使它工作:
Data[day1] = {}
Data[day1][e1] = 4
Run Code Online (Sandbox Code Playgroud)
但通常你会先测试看那本字典是否存在; 使用dict.setdefault()以使之成为一个步骤的过程:
if day1 not in Data
Data[day1] = {}
Data[day1][e1] = 4
Run Code Online (Sandbox Code Playgroud)
该collections.defaultdict()类型自动化该过程:
from collections import defaultdict
Data = defaultdict(dict)
Data[day1][e1] = 4
Run Code Online (Sandbox Code Playgroud)
该day1键不存在,但defaultdict()随后对象调用构造函数配置(dict在这里),根据需要为关键产生新的价值.