Если вы хотите всегда сохранять первое значение, связанное с данным ключом, простой трюк состоит в том, чтобы использовать setdefault
, чтобы установить значение только , если ключ не уже существует:
with open("archive.txt") as f:
for line in f:
key, val = line.split()
dictionary.setdefault(key, val)
dictionary.setdefault(key, val)
по существу эквивалентно более многословному:
if key not in dictionary:
dictionary[key] = val
хотя (по крайней мере на CPython, хотя не обязательно все чередуются интерпретаторы) первым является atomi c (когда ключ является встроенным типом, например, str
в этом случае), а вторым - нет (два потока могут оба выполнить тест, не найти такого ключа, затем обе вставки в произвольном порядке, и оба потока будут считать, что они установили значение, даже если победит только вторая записываемая секунда).
Если вы хотите сохранить значение last , то вы хотите, тогда ваш оригинальный код уже в порядке; dict
s хранит только одну копию ключа, поэтому заменяет связанное значение, если оно переназначено, поэтому ваш исходный код сохраняет только последнее значение.