在词典中分配嵌套键和值

时间:2014-03-17 13:19:09

标签: python dictionary

我需要将嵌套值分配给字典。为了便于理解,我简化了我的问题:

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]),因为我必须将对象分配给循环内的键。

2 个答案:

答案 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