【问题标题】:Building dictionary from list using for loop in Python在 Python 中使用 for 循环从列表中构建字典
【发布时间】:2019-01-03 15:28:37
【问题描述】:

我在一个目录中有多个格式文件。我正在尝试构建一个列表或字典,以使用 for 循环在 python 中对类似的格式化(扩展)文件进行分组,但不知何故它不起作用。

这是我的示例代码:

extension = ['pdf','xlsx','doc']

file_name_path=[]
file_dict ={}
for i in range(len(extension)):
    for file_name in filelst:
        if os.path.splitext(file_name)[-1] == extension[i]:
            file_name_path.append(file_name)
            file_dict[str(extension[i])]= file_name_path


file_name_path   
file_dict

其中 filelst 是一个包含所有文件名的列表,例如 like

filelst = 
['PD_CFS_PLL_OnMonSummary_2017Q2.xlsx',
 'PD_Detailed_OMR_PLL_Lines_2017Q2.xlsx',
 'PD_Detailed_OMR_PLL_Loans_2017Q2.xlsx',
 'regexp-tip-sheet.pdf',
 'SAS statistical-business-analyst certification .pdf']

【问题讨论】:

  • “不工作”到底是什么意思?如果这就是您的意思,它实际上不会打印或输出任何内容。
  • 你的i在哪里?
  • 另外,看看endswith内置方法
  • 我的错。我刚刚编辑了代码。

标签: python for-loop


【解决方案1】:

获取带有扩展名作为键的字典的替代方法

extension = ['.pdf','.xlsx','.doc']
filelist = ['one.pdf','two.pdf','three.doc','four.xlsx'] #just for example
d = dict()
for i in extension:
    d[i] = [j for j in filelist if os.path.splitext(j)[-1].lower()==i]
print(d)

输出:

{'.doc': ['three.doc'], '.xlsx': ['four.xlsx'], '.pdf': ['one.pdf', 'two.pdf']}

请注意,我在扩展列表中使用点作为os.path.splitext 返回列表,最后一个元素是'.extension'.lower() 用于使此解决方案不区分大小写,extension 列表中的字符串只能包含小写字符。

【讨论】:

【解决方案2】:

每次看到相同的键时,您都会覆盖字典值。

相反,使用列表作为值并追加。这就是defaultdict 的用途。

从集合导入默认字典

extension = ['pdf','xlsx','doc']

file_dict = defaultdict(list)

for file_name in filelst:
    ext = os.path.splitext(file_name)[-1].lower()
    if ext in extension:
        file_dict[ext].append(file_name)

【讨论】:

    猜你喜欢
    • 2019-04-23
    • 1970-01-01
    • 2013-10-07
    • 1970-01-01
    • 2018-02-16
    • 2021-07-06
    • 1970-01-01
    • 2017-04-05
    • 2020-08-03
    相关资源
    最近更新 更多