在字典中分配嵌套键和值
我需要给一个字典里的嵌套值赋值。我把问题简化了一下,方便理解:
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 个回答
4
你需要为每个键创建一个空的字典,像这样:
Data = {}
Data['day1'] = {}
Data['day1']['e1'] = 4
17
你需要在 Data
里面放一个 新的 字典,这样才能让它正常工作:
Data[day1] = {}
Data[day1][e1] = 4
不过通常你会先检查一下这个字典是否已经存在;可以用 dict.setdefault()
这个方法,把这个过程变成一步搞定:
if day1 not in Data
Data[day1] = {}
Data[day1][e1] = 4
collections.defaultdict()
类型 可以自动化这个过程:
from collections import defaultdict
Data = defaultdict(dict)
Data[day1][e1] = 4
比如 day1
这个键现在还不存在,但 defaultdict()
对象会自动调用你设置的构造函数(这里是 dict
),根据需要为这个键生成一个新的值。