构建Python Dict

时间:2017-12-28 18:29:50

标签: python list dictionary

我正在编写一个读取确定文件的函数,这种情况下,用户可以选择他想要读取的文件。

import os
import pprint as p

path = "C:\Users\cgr02\Documents\Py"
listname = {}

for root, dirs, files in os.walk(path):
 for filename in files:
  if filename.endswith(".xlsx"):
   ob = listanome.setdefault(filename, dict({'FILE': filename}))

p.pprint (listname)

输出:

 '19-10-2017.xlsx': {'FILE': '19-10-2017.xlsx'},
 '19-11-2017.xlsx': {'FILE': '19-11-2017.xlsx'},
 '20-06-2017.xlsx': {'FILE': '20-06-2017.xlsx'},
 '20-07-2017.xlsx': {'FILE': '20-07-2017.xlsx'},
 '20-08-2017.xlsx': {'FILE': '20-08-2017.xlsx'},
 '20-09-2017.xlsx': {'FILE': '20-09-2017.xlsx'},
 '20-10-2017.xlsx': {'FILE': '20-10-2017.xlsx'},

用户期望看到的内容:

'1': {'File': '20-10-2017.xlsx'},
'2': {'File': '20-09-2017.xlsx'},
'3': {'File': '20-08-2017.xlsx'},
'4': {'File': '20-12-2017.xlsx'},
'5': {'File': '20-11-2017.xlsx'},

我不知道这是否是在屏幕上显示和操纵用户选择的更好方式。使用列表会更好吗?

1 个答案:

答案 0 :(得分:1)

是的,你可以简单地使用一个列表。使用列表推导也可以使这比使用dict.setdefault更直接。

例如:

import os
path = ...
files = [filename for root, dirs, files in os.walk(path) 
         for filename in files 
         if filename.endswith(".xlsx")]

然后使用enumerateprint代替pprint

for idx, file in enumerate(files, 1):  # enumeration, starting with 1 instead of 0
    print(idx, file)

请注意,您可能应存储rootdirs,以防您确实需要再次找到“已选择”文件。