如何从键为int值为collections.deque的字典中提取非空deque条目
解决方案
你可以直接用字典推导式来实现,而且完全不需要遍历deque的元素——因为Python里的collections.deque支持直接通过布尔判断快速确定是否为空,这个判断是O(1)时间复杂度的底层操作,不会遍历队列内容。
具体代码如下:
from collections import deque # 示例dqs字典 dqs = { 1: deque([1,2,3]), 2: deque(), 3: deque(['a','b']), 4: deque() } # 过滤出非空deque的条目 filtered_dqs = {k: v for k, v in dqs.items() if v}
原理说明
当你写if v的时候,Python会自动调用deque的__bool__魔法方法,这个方法内部直接检查队列的长度是否大于0。而deque的长度是由底层维护的计数器记录的,不需要遍历任何元素就能获取,效率很高。
你也可以写成if len(v) != 0,效果完全一样,但直接用if v更简洁。
内容的提问来源于stack exchange,提问作者roulette01
相关产品推荐
相关产品推荐

