在字典中分配嵌套键和值

8 投票
2 回答
9688 浏览
提问于 2025-04-17 22:39

我需要给一个字典里的嵌套值赋值。我把问题简化了一下,方便理解:

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),根据需要为这个键生成一个新的值。

撰写回答