考虑 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) 操作
