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 ListComprehensionVs。将接受的答案说成的地图:
在其他情况下,列表理解可能会更快,并且大多数(并非全部) pythonista用户认为列表更直接,更清晰 。
但是,对于使用列表推导仅产生副作用是否是Pythonic是公认的答案?说:
这样做 是非常反Python的( 仅将理解列表仅用于副作用,忽略返回值),任何经验丰富的Pythonista都会为您带来麻烦。中间列表在创建后会被丢弃,它可能非常大,因此创建起来很昂贵。
PS:我已经对哪一个是最好的提出了意见,但是我的一位同事不同意。这就是为什么我要问。
我认为Abhijit答案的这种变化最好,同时也是我的第4点的变化。
for r in res: r.update(r.pop('some_key', {}))
for
if