Skip to main content
 首页 » 编程设计

python 字典/列表理解 : why is it slower than for loop

2025年05月04日12jyk

考虑 events 这里有大约 48,000 个字典对象:

keyed_events = { gid: [ r for r in events if r['gid'] == gid ] for gid in gidlist } 

大约比以下慢 4 倍:

keyed_events = {} 
for event in events: 
    gid = event['gid'] 
    if gid not in keyed_events: 
        keyed_events[gid] = [] 
    keyed_events[gid].append(event) 

虽然前者看起来更有效率。为什么比较慢?遍历 events 每次通过字典理解?

请您参考如下方法:

keyed_events = { gid: [ r for r in events if r['gid'] == gid ] for gid in gidlist } 

列表/字典理解运行 len(gidlist)*len(events) 次,因为它在 gidlist 的循环内循环遍历 events 。

另一方面,for 循环在 events 上只有一个 for 循环,gid not in keyed_events 这是一个 O(1) 操作