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

How to put my size and name of a file into dictionary

我有 3 个文件 size_1.py size_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 字典的值中。您应该放置字符串列表。为此,我建议您使用 defaultdict class 直接定义一个以列表为值的字典,这样更舒服。
我可能还会建议您对代码进行一些小的改进以提高可读性,如下所示:

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)