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 List Comprehension Vs。接受答案的地图:
[...] 在其他情况下,列表理解可能更快,并且大多数(不是全部)pythonistas 认为它们更直接和更清晰[...]。
尽管如此,接受的答案是 Pythonic to use list comprehensions for just side effects?说:
这样做是非常反 Python 的[仅对副作用使用理解列表,忽略返回值],任何经验丰富的 Pythonista 都会让你大吃一惊。中间列表在创建后被丢弃,它可能非常非常大,因此创建成本很高。
PS:我已经对哪个最好有意见,但我的一位同事不同意。这就是我询问的原因。