Python 如何将我的文件大小和名称放入字典

Python 如何将我的文件大小和名称放入字典,python,list,file,dictionary,file-io,Python,List,File,Dictionary,File Io,我有3个文件size\u 1.pysize\u 2.pysize.py 我的代码在下面 import os result = {} for (dirname,dirs,files) in os.walk('.'): for filename in files: if filename.endswith('.py'): thefile = os.path.join(dirname,filename) size = (os.p

我有3个文件
size\u 1.py
size\u 2.py
size.py

我的代码在下面

import os
result = {}
for (dirname,dirs,files) in os.walk('.'):
    for filename in files:
        if filename.endswith('.py'):
            thefile = os.path.join(dirname,filename)
            size =  (os.path.getsize(thefile),thefile)
           # print (size)
            result[size[0]] = size[1]
print (result)
我的输出

{315: './size.py', 249: './size_1.py'}
我的期望输出

{315:['./size.py']
249 : ['size_1.py', './size_2.py']
}

您只需添加一个if检查,查看字典中是否已经存在键(大小):

import os
result = {}
for (dirname,dirs,files) in os.walk('.'):
    for filename in files:
        if filename.endswith('.py'):
            thefile = os.path.join(dirname,filename)
            size =  (os.path.getsize(thefile),thefile)
           # print (size)
        if size[0] in result:
            result[size[0]].append(size[1])
        else:
            result[size[0]] = [size[1]]
print (result)

您只在
result
dictionary的值中放入字符串。你应该把字符串列表。为此,我建议您使用
defaultdict
类直接定义一个以列表作为值的字典,这样更方便。
我还可以建议您对代码的可读性进行一些小的改进,如下所示:

import os
from collections import defaultdict

result = defaultdict(list)
for (dirname,dirs,files) in os.walk('.'):
   for filename in files:
        if filename.endswith('.py'):
            thefile = os.path.join(dirname,filename)
            size =  os.path.getsize(thefile)
            result[size].append(thefile)
print (result)

您可以使用列表的defaultdict轻松完成此操作,只需附加值而不是赋值

import os
from collections import defaultdict
result = defaultdict(list)
for (dirname,dirs,files) in os.walk('.'):
    for filename in files:
        if filename.endswith('.py'):
            thefile = os.path.join(dirname,filename)
            size =  (os.path.getsize(thefile),thefile)
           # print (size)
            result[size[0]].append(size[1])
print (result)

或者,在不使用defaultdict的情况下:

import os
result = {}
for (dirname,dirs,files) in os.walk('.'):
    for filename in files:
        if filename.endswith('.py'):
            thefile = os.path.join(dirname,filename)
            size =  (os.path.getsize(thefile),thefile)
           # print (size)
            result.setdefault(size[0], []).append(size[1])
print (result)

你能更好地解释你的输入和输出之间的关系吗?