python dict初始化大小_在Python中初始化/创建/填充Dict的Dict
我必須在為我的研究編寫代碼時經常這樣做。您將希望使用defaultdict包,因為它允許您添加鍵:值對在任何級別上,通過簡單的分配。回答完你的問題我會給你看的。這是直接來源于我的一個程序。關注最后4行(不是注釋)并在塊的其余部分跟蹤變量,看看它在做什么:from astropy.io import fits #this package handles the image data I work with
import numpy as np
import os
from collections import defaultdict
klist = ['hdr','F','Ferr','flag','lmda','sky','skyerr','tel','telerr','wco','lsf']
dtess = []
for file in os.listdir(os.getcwd()):
if file.startswith("apVisit"):
meff = fits.open(file, mode='readonly', ignore_missing_end=True)
hdr = meff[0].header
oid = str(hdr["OBJID"]) #object ID
mjd = int(hdr["MJD5"].strip(' ')) #5-digit observation date
for k,v in enumerate(klist):
if k==0:
dtess = dtess+[[oid,mjd,v,hdr]]
else:
dtess=dtess+[[oid,mjd,v,meff[k].data]]
#header extension works differently from the rest of the image cube
#it's not relevant to populating dictionaries
#HDUs in order of extension no.: header, flux, flux error, flag mask,
# wavelength, sky flux, error in sky flux, telluric flux, telluric flux errors,
# wavelength solution coefficients, & line-spread function
dtree = defaultdict(lambda: defaultdict(lambda: defaultdict(list)))
for s,t,u,v in dtess:
dtree[s][t][u].append(v)
#once you've added all the keys you want to your dictionary,
#set default_factory attribute to None
dtree.default_factory = None
這是摘要版本。在首先,對于一個n級字典,必須進行排序和轉儲
所有內容都以[key_1,key_2,
... ,鍵\n,值]。在
然后,要初始化n級字典,
只需輸入“defaultdict(lambda:”(減去引號)n-1次,
在末尾粘貼“defaultdict(list)”(或其他數據類型),然后
關閉括號。在
用for循環附加到列表。*注意:當您訪問數據值時
你可能會有最低檔的U鍵
[…][key_n][0]獲取實際值,而不僅僅是數據的描述
在其中鍵入。在
*編輯:當你的字典足夠大的時候,設置
默認的“工廠”屬性為“無”。在
如果尚未將default_factory設置為None,則可以稍后通過鍵入my_dict[key_1][key_2][…][new_key]=new_value,或使用append()命令來添加到嵌套字典中。您甚至可以添加額外的字典,只要您通過這些賦值形式添加的字典本身不是嵌套的。在
在*
警告!該代碼段中新添加的最后一行(在該行中,您將default_factory屬性設置為None)是super important。你的電腦需要知道你什么時候完成了字典的添加,否則它可能會繼續在后臺分配內存以防止buffer overflow,耗盡你的內存,直到程序停止運行。這是memory leak的類型。在我寫下這個答案后的一段時間里,我艱難地學會了這一點。這個問題困擾了我幾個月,我甚至不認為我是最終解決它的人,因為我對內存分配一無所知。在
總結
以上是生活随笔為你收集整理的python dict初始化大小_在Python中初始化/创建/填充Dict的Dict的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iPhone 14的感叹号屏长什么样好看
- 下一篇: python3 ftp.mlsd,pyt