You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python字典关联deque时popleft仅首次生效问题求助

解决你的Deque Popleft仅第一次生效的问题

兄弟,我来帮你捋捋这个问题。先看看你现有代码里的小坑,再给你一个能正常跑的方案。

先揪出你代码里的问题

你创建了people1、people2、people3三个实例,但只把people1塞进了字典的deque里,people2和people3完全没加进去!这就导致初始deque里只有一个元素,第一次popleft()之后就空了,再调用要么抛异常要么没反应,看起来就像“只有第一次生效”。

另外,如果后续你不小心重新给EmployeePoint.dic["Rafael"]赋值了新的deque(比如又写了EmployeePoint.dic["Rafael"] = deque([people1])),那每次popleft后都会被重置,也会出现同样的问题。

正确的实现方式

咱们把添加元素的逻辑放进类的__init__方法里,创建实例时自动加到对应的deque里,不用手动一个个加,也不会漏。然后测试popleft的效果:

from collections import deque

class EmployeePoint:
    dic = {}  # 类共享的字典,所有实例共用

    def __init__(self, name, point):
        self.name = name
        self.point = point
        # 初始化时自动把当前实例加到对应姓名的deque里
        if name not in EmployeePoint.dic:
            EmployeePoint.dic[name] = deque()
        EmployeePoint.dic[name].append(self)

# 创建三个实例,自动添加到Rafael的deque中
people1 = EmployeePoint("Rafael", "18")
people2 = EmployeePoint("Rafael", "19")
people3 = EmployeePoint("Rafael", "20")

# 看看初始状态
print("初始deque内容:", [p.point for p in EmployeePoint.dic["Rafael"]])  # 输出 ['18', '19', '20']

# 第一次popleft
first_item = EmployeePoint.dic["Rafael"].popleft()
print("第一次取出的元素:", first_item.point)  # 输出 18
print("第一次popleft后的deque:", [p.point for p in EmployeePoint.dic["Rafael"]])  # 输出 ['19', '20']

# 第二次popleft
second_item = EmployeePoint.dic["Rafael"].popleft()
print("第二次取出的元素:", second_item.point)  # 输出 19
print("第二次popleft后的deque:", [p.point for p in EmployeePoint.dic["Rafael"]])  # 输出 ['20']

关键注意事项

  1. 别手动重复赋值deque:字典里存的是deque的引用,直接调用append或popleft就能修改原对象,别再重新给EmployeePoint.dic["Rafael"]赋值新的deque,不然会覆盖之前的修改。
  2. 检查deque是否为空:调用popleft前最好先判断一下,避免抛出异常:
    if EmployeePoint.dic["Rafael"]:
        EmployeePoint.dic["Rafael"].popleft()
    else:
        print("deque已经空啦,没法再取了!")
    
  3. 自动添加元素更靠谱:把添加逻辑放进__init__里,创建实例时自动加入deque,就不会像之前那样漏加people2和people3了。

内容的提问来源于stack exchange,提问作者Rafael Rocha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:28:26