我目前正在从 itertools groupby 对象构造一个字典理解,以构造一些字符串的查找字典。
#groupby iterable arranged by first 3 chars of each element of 'Titles' list.
lookup= groupby(sorted(Titles), key=itemgetter(0,1,2))
#key=concatenate the elements of the tuple, val=list of grouper iterable
lookdict={''.join(i):list(j) for i,j in lookup}
第二行给出了IndexError:字符串索引超出范围
。我无法判断这是否是 j
、石斑鱼迭代或 dict comp 中的 join
调用的问题。
以下内容:
for i,j in lookup:
print(''.join(i),j)
正如预期的那样,没有问题。
有必要将值作为列表,将键作为字符串,以避免每次查找时进行某种转换。
谁能指出我哪里出错了?
最佳答案
当您将长度小于三的标题传递给 itemgetter
时,会发生这种情况:
itemgetter(0, 1, 2)('h')
IndexError: string index out of range
在您理解之前,IndexError
不会发生,因为 lookup
包含 itertools._grouper
对象。这些对象是尚未解压的生成器。因此,通过在这些对象上调用 list
,您正在尝试解压它们,从而导致错误。
我认为你应该将你的key
更改为自定义函数,例如:
def key(item):
return item[:3]
key('h') # --> 'h'
key('hello') # --> 'hel'
关于python - 字典理解索引错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49626962/