Мой совет: если вам нужно перечитать входной файл, вы также можете пересоздать свой словарь, но это зависит от времени, необходимого для его создания.По вашему запросу, возможно, быстрее проанализировать различия в файле и обновить словарь.
Вы можете взглянуть на модуль difflib
, а затем проанализировать различия.Исходя из этого, удаление может быть удалено в словаре, добавление может быть добавлено по мере необходимости.
К сожалению, могу поспорить, что вам будет трудно с его выводом: это должно быть читаемым человеком, а не машиночитаемым, так что может быть лучший ответ.
РЕДАКТИРОВАТЬ Если вы хотите отслеживать изменения между двумя версиями файлов, как написано в вашем комментарии, вы можете сравнить словари,Для ключей у вас уже есть то, что нужно.
Теперь для обновленных значений: если вы уверены, что ваши значения всегда будут списками строк, то вы можете сделать то же самое, что и для сравнения клавиш dict:
>>> def comp(old_dict, new_dict):
... for key, old_val in old_dict.items():
... new_val = new_dict[key] # warning: to be used on keys in both dict
... print 'evolutions for', key
... print 'new content:', [x for x in new_val if x not in old_val]
... print 'removed content:', [x for x in old_val if x not in new_val]
# now testing on a simple example
>>> o = {'key1': ['a', 'b', 'c']}
>>> n = {'key1': ['b', 'c', 'd']}
>>> comp(o, n)
evolutions for key1
new content: ['d']
removed content: ['a']
Предупреждение: эта функция работает, только если new_dict
содержит все ключи old_dict
, в противном случае создание new_val
завершится неудачно.Вы можете легко обойти эту проблему, добавив сравнения клавиш в функцию:
- ключи в
old_dict
, которых нет в new_dict
, являются удаленными записями; - ключи в
new_dict
, а не в old_dict
являются дополнениями.
Пожалуйста, опубликуйте свой результат в своем ответе, чтобы другие могли воспользоваться им.