Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在字典中指定嵌套键和值_Python_Dictionary - Fatal编程技术网

Python 在字典中指定嵌套键和值

Python 在字典中指定嵌套键和值,python,dictionary,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} Dat

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

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

您需要在
Data
中存储一个新的字典来实现这一点:

Data[day1] = {}
Data[day1][e1] = 4
但通常情况下,你会先测试字典是否存在;使用
dict.setdefault()
使其成为一个一步过程:

if day1 not in Data
    Data[day1] = {}
Data[day1][e1] = 4
将自动执行该过程:

from collections import defaultdict

Data = defaultdict(dict)
Data[day1][e1] = 4

day1
键还不存在,但是
defaultdict()
对象随后调用配置的构造函数(
dict
),根据需要为该键生成一个新值。

必须为每个键创建一个空dict,如

Data={}

Data['day1']={}


Data['day1']['e1']=4

这对于一个级别来说很酷,但是它可以很容易地推广到多个级别吗?我猜defaultdict(defaultdict(dict))只能给我们增加一个级别?@BenFarmer:将其扩展到无限级别被称为自动活体化,您只需要一个单独的工厂:
factory=lambda:defaultdict(factory)
,然后
data=defaultdict(factory)
。请注意工厂的递归定义。。