簡體   English   中英

在Python中使用for循環從列表構建字典

[英]Building dictionary from list using for loop in Python

我的目錄中有多個格式文件。 我正在嘗試建立一個列表或字典,以使用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是具有所有文件名的列表,例如

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']

獲取擴展名為鍵的字典的替代方法

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列表中的字符串必須僅包含小寫字符。

每次看到相同的鍵都將覆蓋字典值。

而是使用列表作為值並附加。 這就是defaultdict目的。

從集合導入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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM