【发布时间】:2019-07-30 09:29:15
【问题描述】:
我想知道是否有办法在循环中使用具有相似名称的字典中的文件。
我有这个字典:
dcm = {}
for filename in os.listdir('./GMATfiles'):
if fnmatch.fnmatch(filename,'DCM_hydra*.txt'):
dcm[filename[:11]] = os.path.normpath(''.join(['./GMATfiles', '/', filename]))
#print(dcm)
#OUT_INPUT
out={}
for filename in os.listdir('./GMATfiles'):
if fnmatch.fnmatch(filename,'Out_hydra*.txt'):
out[filename[:11]] = os.path.normpath(''.join(['./GMATfiles', '/', filename]))
#print(out)
#MATRIX_INPUT
mtr={}
for filename in os.listdir('./GMATfiles'):
if fnmatch.fnmatch(filename,'matrizr_hydra*.txt'):
mtr[filename[:15]] = os.path.normpath(''.join(['./GMATfiles', '/', filename]))
#print(mtr)
我从这些字典中得到的名字都是一样的,除了一个数字(例如:DCM_hydra01、DCM_hydra02、DCM_hydra03 等)
然后我需要在某些功能中使用字典中的这些文件:
IFOV1= gi.IFOV_generic(out['Out_hydra01'],mtr['matrizr_hydra01'], dcm['DCM_hydra01'],'ifovfile_hydra1', endpoint)
IFOV2= gi.IFOV_generic(out['Out_hydra02'],mtr['matrizr_hydra02'], dcm['DCM_hydra02'],'ifovfile_hydra2',endpoint)
.
.
.
有没有办法编写一个循环,让我获得这些 IFOV 函数而无需一个一个地编写它们?
有人已经告诉我使用zip():
dcm = {'f1': 'path_to_file'}
out = {'f1': 'path_to_file'}
mtr = {'f1': 'path_to_file'}
IFOV = []
for d, o, m in zip(dcm, out, mtr):
IFOV.append(
gi.IFOV_generic(out[o], mtr[m], dcm[d], endpoint)
)
但我需要获取文件的名称('ifovfile_hydra*'),我不确定这段代码是否可以做到这一点。
【问题讨论】:
-
您可以使用相同的键 -
out["01"]、mtr["01"]、dcm["01"]保留值,然后您可以更轻松地获取它们 -key = "01"和out[key]、mtr[key]、@987654331 @, 和"ifovfile_hydra" + int(key)得到"ifovfile_hydra1"或"ifovfile_hydra" + key如果你喜欢"ifovfile_hydra01" -
您可以在嵌套字典中将这些项目组合在一起,而不是拥有三个字典。格式类似于:
{"hydra01": {"out": ..., "matrizr": ..., "DCM": ...}, "hydra02: {"out": ..., "matrizr": ..., "DCM": ...}, ...}
标签: python python-3.x loops dictionary