Python字典理解循环

Python字典理解循环,python,dictionary,Python,Dictionary,因此,我的理解业务正在运行,但我想知道是否有比为每个索引单独循环更快的方法来实现这一点 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 r

因此,我的理解业务正在运行,但我想知道是否有比为每个索引单独循环更快的方法来实现这一点

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']完全相同。一个明显的改进是只构建一次字典并复制它(如果对应用程序更有意义的话,也可以使用deepcopy)。但这与理解的工作方式无关,它只是一种很好的编程技术。你想问一个更有针对性的问题吗

我还认为,在长长的字典声明语句中包含字典理解是很难理解的。

您正在使用:

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


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

您的预期输出是什么?我得到了预期输出,我只是想知道是否有更快的方法来完成我正在做的事情。所以我们应该告诉你如何更快地从我们不知道的输入到我们不知道的输出?为什么首先要使用字典?numpy数组是专门为多维数据设计的,可以很好地处理netCDF文件。我使用字典是因为np数组没有我使用的几个成员,而且每次需要时我都懒得将np数组转换为列表。嗨,对不起,如果我最初的问题看起来有点模糊,我会尝试重申
dR={i:{o代表范围(0,5)中的o}代表范围(0,5)中的i}
所以我对字典中的一些索引执行此操作,我想知道是否有比使用4个单独的循环更快的方法。我想尽量减少代码行,所以我宁愿在字典的初始设置中完成。你的问题很清楚。但是你想要哪一条,最快的路还是最短的路?如果您想要最快的速度,您真的认为多次执行同一个循环可能是正确的吗?为什么要最小化行数?这怎么可能成为任何编程任务的目标?你是在用电话付费让别人替你写吗?