我有一个包含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
循环来构建适当的字典?
谢谢!
答案 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
}