【问题标题】:How to put my size and name of a file into dictionary如何将我的文件大小和名称放入字典
【发布时间】:2019-08-13 08:25:29
【问题描述】:

我有 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']
}

【问题讨论】:

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

标签: python list file dictionary file-io


【解决方案1】:

您只能将字符串放入 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)
            result[size].append(thefile)
print (result)

【讨论】:

    【解决方案2】:

    您可以添加一个 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)
    

    【讨论】:

      【解决方案3】:

      您可以使用 list 的 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)
      

      或者,不使用默认字典:

      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)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-01-06
        • 2020-02-11
        • 1970-01-01
        • 2015-06-01
        • 2010-09-25
        • 2017-07-21
        • 2021-07-10
        相关资源
        最近更新 更多