Сжатие следующего кода, предпочтительно с использованием словарного понимания

Можно ли (и, что еще более важно, практично) написать следующий код в качестве разборчивого понимания?

Я создаю здесь словарь, а затем проверяю "пустые" значения (представленные символом "-") и заменяю его другим строковым значением.

test_dict = dict(zip(list_one,list_two))
for k,v in test_dict.items():
    if v == '-':
        test_dict[k] = 'missing'

1 ответ

Почему бы не сделать замену при создании словаря?

test_dict = dict(zip(list_one, 
                     ('missing' if x == '-' else x for x in list_two)))

Или, если у вас есть существующий словарь, вы можете создать новый, используя:

{k: 'missing' if v == '-' else v for k, v in d.items()}

Если вы хотите изменить существующий словарь на месте, тогда действительно нет ничего плохого в существующем коде. Вы можете использовать понимание списка, например:

[d.__setitem__(k, 'missing') for k, v in d.items() if v == '-']

но это довольно некрасиво.

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