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, хотя я бы поспорил, что вставка мутационных операций в печатное заявление сбивает с толку и может принести больше вреда, чем пользы.

Другие вопросы по тегам