Python自定义MappingList类insert方法中字典推导式触发解包错误
错误原因
首先明确:不是OrderedDict.items()返回整数导致的,问题出在字典遍历的逻辑上。
你出错的代码行是:
for k, v in {k: v for k, v in self.seq.items() if k > index}:
这里你写的迭代对象是字典推导式生成的dict实例,Python中直接遍历字典时,默认只会迭代字典的键(也就是你存储的整数类型索引),不会返回键值对。你尝试把每次迭代拿到的单个整数拆成k和v两个变量,自然就会抛出cannot unpack non-iterable int object的错误。
修复方案
你只需要给迭代的字典加上.items()调用,明确要遍历键值对即可:
for k, v in {k: v for k, v in self.seq.items() if k > index}.items():
如果想优化性能,完全没必要额外生成一个中间字典,直接过滤原OrderedDict的items结果就行:
for k, v in (item for item in self.seq.items() if item[0] > index):
额外注意
你当前的insert方法还有隐藏问题:当MappingList为空时,调用max(self.seq.keys())会直接抛出ValueError,需要额外处理空列表的边界情况。
内容的提问来源于stack exchange,提问作者Alan Bagel
相关产品推荐
相关产品推荐

