我需要将嵌套值分配给字典。为了便于理解,我简化了我的问题:
Data = {}
day1 = 'March12'
day2 = 'March14'
e1 = 'experiment1'
e2 = 'experiment2'
Data[day1][e1] = 4
但是Data[day1][e1] = 4
命令不起作用(出于与test = {} ; test["foo"]["bar"] = 0
相同的原因)。有没有办法解决这个问题?
我尝试过这样的事情:
me1 = {e1 : 4}
me2 = {e2 : 5}
Data = {day1 : me1}
Data = {day2 : me2}
但我无法成功;我写的所有东西都以某种方式覆盖了现有的价值观,或者不像我希望的那样。我可能错过了一些东西......
一些额外的注意事项:在开始时,没有关于字典长度的任何信息,或者它的确切外观。而不是值4
,我将一个对象指定为值。我需要使用这样的结构(Data[day1][e1]
),因为我必须将对象分配给循环内的键。
答案 0 :(得分:8)
您需要在Data
内存储新字典才能使其正常工作:
Data[day1] = {}
Data[day1][e1] = 4
但通常你会先测试一下该字典是否存在;使用dict.setdefault()
进行一步式处理:
if day1 not in Data
Data[day1] = {}
Data[day1][e1] = 4
collections.defaultdict()
type自动执行该过程:
from collections import defaultdict
Data = defaultdict(dict)
Data[day1][e1] = 4
day1
密钥尚不存在,但defaultdict()
对象随后调用配置的构造函数(此处为dict
)以根据需要为该密钥生成新值。
答案 1 :(得分:2)
您必须为每个键创建每个空dict,如
Data = {}
Data['day1'] = {}
Data['day1']['e1'] = 4