将项添加到dict中的列表

时间:2017-12-05 18:31:08

标签: list dictionary python-3.6

我有一个按预期工作的程序:

import os
import hashlib
from pprint import pprint


def md5(fname):
    hash_md5 = hashlib.md5()
    with open(fname, "rb") as f:
        for chunk in iter(lambda: f.read(4096), b""):
            hash_md5.update(chunk)
    return hash_md5.hexdigest()


lst = []
for dirpath, dirnames, filenames in os.walk('d:\\python\\exercism.io'):
    d = {dirpath: filenames}
    for filename in filenames:
        d[filename] = [os.stat(dirpath).st_mtime, md5(dirpath + '\\' + filename)]
        # d[filename] = [os.stat(dirpath).st_mtime]
        # d[filename] = [md5(dirpath + '\\' + filename)]
    lst.append(d)

pprint(lst)

我的问题是:

如果我摆脱这条线:

        d[filename] = [os.stat(dirpath).st_mtime, md5(dirpath + '\\' + filename)]

并尝试使用两个注释掉的行(带有修改 - 见下文),它失败了。

1)要么自己注释掉线条。我得到一个键:值对,其中值是一个列表。

然后我想将第二个注释掉的行的值添加到列表中。

我正在尝试这个:

        d[filename][1] = md5(dirpath + '\\' + filename)

但是我的索引超出了范围错误。列表的第一个元素 应该是项目[0],第二个应该是[1]。

部分输出:

[{'ceasar_cipher.py': [1512494094.5630972, '844e069c90ebdb3e1e5f5dd56da2ac2e'],
  'd:\\python\\exercism.io': ['ceasar_cipher.py',
                              'difference_of_squares.py',
                              'gigasecond.py',
                              'grains_in_python.py',
                              'hamming-compare.py',
                              'isogram.py',
                              'leap_year.py',
                              'rna_transcription.py',
                              'run_length_encoding.py'],

注意关键:' ceasar_cipher.py'有一个两元素列表的值。

我想用两个注释掉的行构造完全相同的输出 与我现在使用的单行相比(只是我可以,而不是我应该)。我担心的只是我做错了什么。

1 个答案:

答案 0 :(得分:0)

您需要附加到列表中:

d[filename] = [os.stat(dirpath).st_mtime]
d[filename].append(md5(dirpath + '\\' + filename))

获得相同的效果。索引1还没有项目。您需要创建它,例如使用append()