Циклы Python против списков понимания против карты для побочных эффектов (то есть, не используя возвращаемые значения)

TL; DR Что лучше?

1.- [r.update(r.pop('some_key')) for r in res if r.get('some_key')]

2.- map(lambda r: r.update(r.pop('some_key') if r.get('some_key') else []), res)

3.- map(lambda r: r.update(r.pop('some_key')), filter(lambda r: r.get('some_key'), res))

4.- for r in res:
        if r.get('some_key'):
            for element in r['some_key']:
                r[element] = r['some_key'][element]
            del r['some_key']

5.- Insert your own approach here

Запись : Это не рабочий код. Это код, который запускается в тестовом наборе, поэтому меня больше заботит удобочитаемость / ремонтопригодность, чем производительность. Тем не менее, я также хотел бы знать, изменится ли решение относительно того, что лучше (учет компромисса производительности / разборчивости), если бы это был производственный код. Количество элементов some_key достаточно мало, если это имеет значение.

контекст : Я прочиталПонимание списка Python Vs. карта где принятый ответ говорит:

[...] Понимание списка может быть быстрее в других случаях и большинство (не все)питонисты считают их более прямыми и понятными [...].

Тем не менее, принятый ответ наЯвляется ли Pythonic использовать списочные выражения только для побочных эффектов? говорит:

Этоочень анти-Pythonic, чтобы сделать это [используйте списки понимания только для побочных эффектов, игнорируя возвращаемое значение], и любой опытный Pythonista даст вам ад над этим. Промежуточный список выбрасывается после его создания, и он потенциально может быть очень, очень большим и, следовательно, дорогим для создания.

PS: У меня уже есть мнение о том, какой из них лучший, но один из моих коллег не согласен. Вот почему я спрашиваю.

Ответы на вопрос(2)

Ваш ответ на вопрос