Pętle Pythona vs listy rozumienia vs mapa dla efektów ubocznych (tj. Nieużywanie wartości zwracanych)
TL; DR Który jest najlepszy?
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
Uwaga : To nie jest kod produkcyjny. Jest to kod uruchamiany w zestawie testów, więc bardziej interesuje mnie czytelność / łatwość utrzymania niż wydajność. Niemniej jednak chciałbym również wiedzieć, czy decyzja dotycząca tego, która z nich jest lepsza (biorąc pod uwagę wydajność kompromisu / czytelność), zmieni się, jeśli będzie to kod produkcyjny. Liczba elementów „some_key” jest dość mała, jeśli to robi różnicę.
Kontekst : PrzeczytałemPython List Comprehension Vs. Mapa gdzie przyjęta odpowiedź mówi:
[...] Objaśnienia list mogą być szybsze w innych przypadkach i większość (nie wszystkie)pythonistas uważają je za bardziej bezpośrednie i jaśniejsze [...].
Niemniej jednak zaakceptowana odpowiedź naCzy Pythonic używa wyrażeń listowych tylko dla efektów ubocznych? mówi:
Tojest do tego bardzo anty-Pythoniczny [używaj list ze zrozumieniem tylko dla efektów ubocznych, ignorując wartość zwrotną], a każdy doświadczony Pythonista da ci to piekło. Lista pośrednia jest wyrzucana po jej utworzeniu i potencjalnie może być bardzo, bardzo duża, a zatem kosztowna w tworzeniu.
PS: Mam już opinię, która z nich jest najlepsza, ale jeden z moich współpracowników się nie zgadza. Dlatego pytam.