通过在目录中循环来构建Python词典

时间:2018-08-21 13:57:57

标签: python arrays loops dictionary

我有一个包含5个文件的文件夹:

'file42.json','file57.json','file65.json','file81.json','file90.json'。

我想建立一个像这样的字典:

  {
'file42.json' : 42, 
'file97.json' : 57, 
'file57.json' : 65, 
'file81.json' : 81, 
'file90.json' : 90
 }

我尝试了以下代码段...

for f in glob.glob("*.json"):
        d = {}
        d[f]=int(f[:-5])
        print d

但是我得到的结果是,这不尊重字典的样式:

{'file42.json': 10}
{'file57.json': 11}
{'file_65.json': 14}
{'file_81.json': 15}
{'file_90.json': 37}

如何使用for循环来构建适当的字典?
谢谢!

2 个答案:

答案 0 :(得分:2)

该错误正在循环中重新初始化dict。打印每次出现都会使您看起来好像正在构建字典,但实际上不是。

在那之后,您的切片是不正确的:您必须删除扩展名和前缀,因此简单的切片也不会对其进行剪切,因此您得到的结果来自代码您正在尝试跑步。

最好的方法是通过字典理解:

>>> import glob
>>> import os
>>> d = {k: int(os.path.splitext(k)[0][-2:]) for k in globi.glob("*.json")}
>>> d
{'file97.json': 97, 'file42.json': 42}

对于值,提取非扩展部分,取2个数字并转换。

如果只有一位或三位数字,则此方法无效,因此正则表达式可能是更好的选择:

>>> import re
>>> d = {k: int(re.search("\d+", os.path.splitext(k)[0]).group(0)) for k in glob.iglob("*.json")}

答案 1 :(得分:1)

首先使用os.listdir()找到您的文件夹,然后使用strip()函数删除除您要查找的号码以外的所有内容:

import os

d = {}
for file in os.listdir():
    d[file] = int(file.strip('file').strip('.json'))
print(d)

这样您就可以得到:

 d = {
'file42.json' : 42, 
'file97.json' : 57, 
'file57.json' : 65, 
'file81.json' : 81, 
'file90.json' : 90
 }