Python: упростить попробовать / кроме кода?
Извините, если название не достаточно объяснительно, но это лучшее, что я могу придумать. Это часть моего кода, скрипт на python, который переводит файлы из Xilog3 в формат woodWOP (программы cnc).
try:
print >>woodWOPfile, 'YA="%s"' %xbo['Y']
except KeyError:
xbo['Y']=xbo_prev['Y']
print >>woodWOPfile, 'YA="%s"' %xbo['Y']
Это печатает ключевой элемент словаря в выходной файл. Если ключ не существует, я хочу загрузить его из предыдущей версии словаря, xbo_prev, который копируется из xbo перед каждым циклом чтения новой строки.
Использование правила печати дважды кажется довольно глупым, но это лучшее, что я могу придумать. Есть ли способ упростить это?
Спасибо:).
3 ответа
Вы могли бы просто использовать dict.setdefault
:
print woodWOPfile, 'YA="%s"' % xbo.setdefault('Y', xbo_prev['Y'])
Это получает значение, соответствующее ключу Y
если он присутствует на карте, в противном случае присваивает ему второй параметр и возвращает его.
if not 'Y' in xbo:
xbo['Y']=xbo_prev['Y']
print >>woodWOPfile, 'YA="%s"' %xbo['Y']
почему бы не проверить, есть ли он там и установить его первым.
Существующие два ответа тоже работают, но альтернатива, если вы знаете xbo_prev
будет иметь ваш ключ, чтобы воспользоваться .get()
"s default
параметр:
print >>woodWOPfile, 'YA="%s"' % xbo.get('Y', xbo_prev['Y'])
Обратите внимание, что это не меняет xbo
, если вы собираетесь изменить xbo
ты можешь использовать .setdefault()
как полагает juanchopanza, хотя я бы поспорил, что вставка мутационных операций в печатное заявление сбивает с толку и может принести больше вреда, чем пользы.