簡體   English   中英

Python字典理解循環

[英]Python Dictionary Comprehension Loop

因此,我已經開始理解業務,但是我想知道是否有比每個索引都有單獨的循環更快的方法

dR是從netCDF文件加載的一堆信息,而dN正在准備自己作為內插的副本。

dN = {  'lev'   : { i : dR['lev'][i] * 3.370079 for i in range(len(dR['lev'])) },
        'wdi'   : { i : dR['wdi'][i,::,1,1] for i in range(len(dR['tim'])) for o in range(len(dI['lev'])) },
        'wsp'   : { i : dR['wsp'][i,::,1,1] * 1.94384449 for i in range(len(dR['tim'])) for o in range(len(dI['lev'])) },
        'u'     : { i : dR['u'][i,::,1,1] * 1.94384449 for i in range(len(dR['tim'])) for o in range(len(dI['lev'])) },
        'v'     : { i : dR['v'][i,::,1,1] * 1.94384449 for i in range(len(dR['tim'])) for o in range(len(dI['lev'])) },
        'tim'   : dR['tim'][::3],
        'lon'   : dR['lon'][::].tolist(),
        'lat'   : dR['lat'][::].tolist()}

編輯:所以我把一堆索引放在一起,像這樣的循環:

dN = { 'lev'   : dR['lev'][::] * 3.370079,
       'wdi'   : {},
       'wsp'   : {},
       'u'     : {},
       'v'     : {},
       'tim'   : dR['tim'][::3],
       'lon'   : dR['lon'][::].tolist(),
       'lat'   : dR['lat'][::].tolist()}

for i in range( len(dN['tim']) ):
    dN['lev'][i] = dR['lev'][i,::,1,1] * 3.370079
    for o in range( len(dI['lev']) ):
        dN['wsp'][i] = dR['wsp'][i,::,1,1] * 1.94384449
        dN['wdi'][i] = dR['wdi'][i,::,1,1] * 1.94384449
        dN['u'][i] = dR['u'][i,::,1,1] * 1.94384449
        dN['v'][i] = dR['v'][i,::,1,1] * 1.94384449

但是我想知道是否還有一個更快的方法,我發現必須聲明每個主要索引然后在其后手動應用它們有點愚蠢。

我從您的代碼中看到dN ['wsp'],dN ['u']和dN ['v']完全相同。 一個明顯的改進是只構建了一次該字典並進行了復制(如果對應用程序更有意義,則可以進行深度復制)。 但這與理解如何工作無關,這只是一種很好的編程技術。 您是否要提出更具針對性的問題?

我還認為,很難在長字典聲明語句中包含字典理解。

您正在使用:

dR[someindex][i,::,1,1] * somefactor for i in range(len(dR['tim'])) for o in range(len(dI['lev']))

其中某因子為1或1.94384449

總共4次,因此如果不使用乘法器就首先生成該字典一次,則可能會大大提高速度。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM