簡體   English   中英

將項目添加到字典列表中

[英]Add item to a list in a dict

我有一個可以按預期工作的程序:

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'具有一個包含兩個元素的列表。

我想用兩條注釋行與現在使用的單行構造完全相同的輸出(只是這樣,我可以,不是我應該這樣做)。 我擔心的只是我在做什么錯。

您需要追加到列表:

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

獲得相同的效果。 索引1尚無項目。 您需要創建它,例如,使用append()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM