Q:

Проблема заполнения словаря

При попытке заполнить словарь вида: "контрольная сумма файлов : список с именами файлов" цикл каждый раз пересоздает словарь вместо добавления в него новых ключей, или значений в списки значений.
ddd = dict()
for root, dirs, files in os.walk('./2'):
    for name in files:
        with open(os.path.join(root, name), 'r') as opened_file:
            if ( hashlib.md5(opened_file.read().encode('utf-8')).hexdigest() in ddd):
                ddd[hashlib.md5(opened_file.read().encode('utf-8')).hexdigest()].append(name)
            else:
                ddd[hashlib.md5(opened_file.read().encode('utf-8')).hexdigest()] = [name]

В итоге при выводе словаря получается не набор контрольных сумм со списками имен файлов, а только контрольная сумма и имя последнего файла во вложенной директории.

A:

Попробуйте:
from collections import defaultdict
hash_by_name = defaultdict(list)

for root, dirs, files in os.walk('./2'):
    for name in files:
        file_name = os.path.join(root, name)

        with open(file_name, 'rb') as f:
            hash_md5 = hashlib.md5(f.read()).hexdigest()

        hash_by_name[hash_md5].append(name)

